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 相关文章推荐
PHP利用COM对象访问SQLServer、Access
Oct 09 PHP
php正则表达匹配中文问题分析小结
Mar 25 PHP
thinkphp的CURD和查询方式介绍
Dec 19 PHP
一个PHP针对数字的加密解密类
Mar 20 PHP
CMS中PHP判断系统是否已经安装的方法示例
Jul 26 PHP
Windows下的PHP安装pear教程
Oct 24 PHP
PHP之uniqid()函数用法
Nov 03 PHP
使用图灵api创建微信聊天机器人
Jul 23 PHP
在WordPress中获取数据库字段内容和添加主题设置菜单
Jan 11 PHP
抛弃 PHP 代价太高
Apr 26 PHP
PHP对象克隆clone用法示例
Sep 28 PHP
PHP实现Session入库/存入redis的方法
May 04 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写的资源下载防盗链类分享
2014/05/12 PHP
PHP编程中尝试程序并发的几种方式总结
2016/03/21 PHP
PHP实现的简单适配器模式示例
2017/06/22 PHP
JS实现打开本地文件或文件夹
2021/03/09 Javascript
jQuery 点击图片跳转上一张或下一张功能的实现代码
2010/03/12 Javascript
jQuery EasyUI 的EasyLoader功能介绍
2010/09/12 Javascript
11款新鲜的jQuery插件[附所有demo下载]
2011/01/24 Javascript
jQuery 阴影插件代码分享
2012/01/09 Javascript
datagrid框架的删除添加与修改
2013/04/08 Javascript
JS中如何设置readOnly的值
2013/12/25 Javascript
原生javascript+css3编写的3D魔方动画旋扭特效
2016/03/14 Javascript
EasyUI学习之Combobox下拉列表(1)
2016/12/29 Javascript
JS鼠标滚动分页效果示例
2017/07/05 Javascript
Vue2 模板template的四种写法总结
2018/02/23 Javascript
vue axios 在页面切换时中断请求方法 ajax
2018/03/05 Javascript
Vue作用域插槽slot-scope实例代码
2018/09/05 Javascript
详解Vue基于vue-quill-editor富文本编辑器使用心得
2019/01/03 Javascript
jQuery中event.target和this的区别详解
2020/08/13 jQuery
Python functools模块学习总结
2015/05/09 Python
Python矩阵常见运算操作实例总结
2017/09/29 Python
基于Django的乐观锁与悲观锁解决订单并发问题详解
2019/07/31 Python
django+tornado实现实时查看远程日志的方法
2019/08/12 Python
pytorch实现特殊的Module--Sqeuential三种写法
2020/01/15 Python
搭建pypi私有仓库实现过程详解
2020/11/25 Python
HTML5单页面手势滑屏切换原理
2016/03/21 HTML / CSS
韩国三星集团旗下时尚品牌官网:SSF SHOP
2016/08/02 全球购物
adidas美国官网:adidas US
2016/09/21 全球购物
大学生求职简历的自我评价
2013/10/14 职场文书
20年同学聚会邀请函
2014/02/04 职场文书
实习指导老师评语
2014/04/26 职场文书
白血病捐款倡议书
2014/05/14 职场文书
汉语言文学专业自荐信
2014/06/11 职场文书
国际语言毕业生求职信
2014/07/08 职场文书
财政局党的群众路线教育实践活动剖析材料
2014/10/13 职场文书
初中生思想道德自我评价
2015/03/09 职场文书
Nginx配置并兼容HTTP实现代码解析
2021/03/31 Servers