PHP 面向对象实现代码


Posted in PHP onNovember 11, 2009

1,简单的对象创建

//类的作用域final:将阻止子类重写这个字段 
//方法的作用域abstract: 在父类中声明,在子类中实现 
//定义类: 
class Employee{ 
//定义字段 
private $name; 
protected $title; 
public $wage; 
//常量 
const PI = 3.1415926; 
//静态成员变量 
private static $visitors = 0; 
//定义构造函数 
function __construct(){ 
//使用静态成员变量 
self::$visitors++; 
echo "constructor"; 
} 
//定义析构函数 
function __destruct(){ 
echo "destruct"; 
} 
//声明方法 
public function clockIn(){ 
//使用字段 
echo "Member $this->name"; 
} 
//在访问一个对象并不拥有的属性时(比如私有字段),如果该对象用户__get和__set方法,则会自动调用__get方法或__set方法 
function __set($property,$value){ 
$this->$property = $value; 
} 
function __get($property){ 
return $this->$property; 
} 
} 
//类的继承 Manager继承Employee 
class Manager extends Employee { 
function __construct(){ 
//调用父类的构造函数或方法 
parent::__construct(); 
parent::clockIn(); 
echo "Manager constructor"; 
} 
} 
//创建对象 
$employee = new Employee(); 
$employee->wage = 10000; 
//使用常量 
echo Employee::PI; 
//调用方法 
$employee->clockIn(); 
$manager = new Employee(); 
//instanceof判断一个对象是类的实例、类的子类,还是实现了某个特定接口 
if($manager instanceof Employee ) echo "Yes";

2,高级OO特性
(1)对象克隆
//对象克隆 
class ClassA{ 
private $name; 
private $title; 
public function setName($name){ 
$this->name = $name; 
} 
function getName(){ 
return $this->name; 
} 
public function setTitle($title){ 
$this->title = $title; 
} 
public function getTitle(){ 
return $this->title; 
} 
function __clone(){ 
echo "我被克隆了","<br>"; 
} 
} 
$classA = new ClassA(); 
$classA->setName("NameA"); 
$classA->setTitle("TitleA"); 
$classB = clone $classA; 
$classB->setName("NameB"); 
echo $classA->getName(),"<br>",$classA->getTitle(),"<br>"; 
echo $classB->getName(),"<br>",$classB->getTitle(),"<br>"; 
/* output 
我被克隆了 
NameA 
TitleA 
NameB 
TitleA 
*/

(2)接口
//接口 
interface IPillage{ 
function method(); 
} 
class ClassC extends ClassA implements IPillage { 
function method(){ 
echo "inteface method"; 
} 
} 
$classC = new ClassC(); 
$classC->method(); 
//inteface method

(3)抽象类
//抽象类,是不能实例化的类,只能作为其它类继承的基类 
abstract class BaseClass{ 
protected $name; 
abstract function method(); 
} 
class ChileClass extends BaseClass { 
function method(){ 
echo "method"; 
} 
} 
$child = new ChileClass(); 
$child->method(); 
//output method

注:
如果要创建一个模型,这个模型将由一些紧密相关的对象采用,就可以使用抽象类。如果要创建由一些不相关对象采用的功能,就使用接口。
如果必须从多个来源继承行为,就使用接口。php可以继承多个接口,但不能扩展多个抽象类。
如果知道所有类都会共享一个公共的行为实现,就使用抽象类,并在其中实现该行为。在接口中无法实现行为。
PHP 相关文章推荐
Zend引擎的发展 [15]
Oct 09 PHP
php Ajax乱码
Apr 09 PHP
10条PHP编程习惯助你找工作
Sep 29 PHP
有关JSON以及JSON在PHP中的应用
Apr 09 PHP
利用PHP扩展vld查看PHP opcode操作步骤
Mar 04 PHP
PHP判断图片格式的七种方法小结
Jun 03 PHP
php图片缩放实现方法
Feb 20 PHP
dvwa+xampp搭建显示乱码的问题及解决方案
Aug 23 PHP
thinkPHP简单实现多个子查询语句的方法
Dec 05 PHP
PHP生成图片缩略图类示例
Jan 12 PHP
简单实用的PHP文本缓存类实例
Mar 22 PHP
解决thinkPHP 5 nginx 部署时,只跳转首页的问题
Oct 16 PHP
超级简单的php+mysql留言本源码
Nov 11 #PHP
PHP 远程关机实现代码
Nov 10 #PHP
php实现网站插件机制的方法
Nov 10 #PHP
php 向访客和爬虫显示不同的内容
Nov 09 #PHP
php 将excel导入mysql
Nov 09 #PHP
PHP CKEditor 上传图片实现代码
Nov 06 #PHP
PHP 压缩文件夹的类代码
Nov 05 #PHP
You might like
PHP与javascript对多项选择的处理
2006/10/09 PHP
SwfUpload在IE10上不出现上传按钮的解决方法
2013/06/25 Javascript
JavaScript中使用Callback控制流程介绍
2015/03/16 Javascript
原生JS实现响应式瀑布流布局
2015/04/02 Javascript
JavaScript tab选项卡插件实例代码
2016/02/23 Javascript
Bootstrap按钮下拉菜单组件详解
2016/05/10 Javascript
移动开发之自适应手机屏幕宽度
2016/11/23 Javascript
vue2.0开发实践总结之入门篇
2016/12/06 Javascript
ajax实现动态下拉框示例
2017/01/10 Javascript
vue中使用refs定位dom出现undefined的解决方法
2017/12/21 Javascript
js获取对象,数组所有属性键值(key)和对应值(value)的方法示例
2019/06/19 Javascript
vue使用video.js进行视频播放功能
2019/07/18 Javascript
layui 上传图片 返回图片地址的方法
2019/09/26 Javascript
node.js express框架实现文件上传与下载功能实例详解
2019/10/15 Javascript
微信小程序实现多选框全选与反全选及购物车中删除选中的商品功能
2019/12/17 Javascript
实现vuex原理的示例
2020/10/21 Javascript
Django卸载之后重新安装的方法
2017/03/15 Python
基于Python __dict__与dir()的区别详解
2017/10/30 Python
Python实现朴素贝叶斯的学习与分类过程解析
2019/08/24 Python
python 计算两个列表的相关系数的实现
2019/08/29 Python
Django Haystack 全文检索与关键词高亮的实现
2020/02/17 Python
浅谈keras中Dropout在预测过程中是否仍要起作用
2020/07/09 Python
用python写一个带有gui界面的密码生成器
2020/11/06 Python
webapp字号大小跟随系统字号大小缩放的示例代码
2018/12/26 HTML / CSS
关于canvas.toDataURL 在iOS运行失败的问题解决
2020/09/16 HTML / CSS
台湾最大银发乐活百货:乐龄网
2018/05/21 全球购物
货代行业个人求职简历的自我评价
2013/10/22 职场文书
中学生团员自我评价分享
2013/12/07 职场文书
经济管理毕业生求职信
2014/03/15 职场文书
2014年党课学习材料
2014/05/11 职场文书
导游词欢迎词
2015/02/02 职场文书
投诉信回复范文
2015/07/03 职场文书
Python WSGI 规范简介
2021/04/11 Python
MySQL中出现乱码问题的终极解决宝典
2021/05/26 MySQL
无线电知识基础入门篇
2022/02/18 无线电
python双向链表实例详解
2022/05/25 Python