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+xslt在windows平台上
Oct 09 PHP
php下将XML转换为数组
Jan 01 PHP
php float不四舍五入截取浮点型字符串方法总结
Oct 28 PHP
PHP字符串的递增和递减示例介绍
Feb 11 PHP
php打造智能化的柱状图程序,用于报表等
Jun 19 PHP
Symfony2安装第三方Bundles实例详解
Feb 04 PHP
浅谈PHP的反射机制
Dec 15 PHP
Mac系统完美安装PHP7详细教程
Jun 06 PHP
laravel学习笔记之模型事件的几种用法示例
Aug 15 PHP
PHP实现的简单对称加密与解密方法实例小结
Aug 28 PHP
PHPMAILER实现PHP发邮件功能
Apr 18 PHP
PHP中使用mpdf 导出PDF文件的实现方法
Oct 22 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之第一天
2006/10/09 PHP
php中的一些数组排序方法分享
2012/07/20 PHP
php设计模式之策略模式实例分析【星际争霸游戏案例】
2020/03/26 PHP
超棒的javascript页面顶部卷动广告效果
2007/12/01 Javascript
style、 currentStyle、 runtimeStyle区别分析
2010/08/01 Javascript
js添加table的行和列 具体实现方法
2013/07/22 Javascript
JS清除选择内容的方法
2015/01/29 Javascript
thinkphp实现无限分类(使用递归)
2015/12/19 Javascript
Angular发布1.5正式版,专注于向Angular 2的过渡
2016/02/18 Javascript
一个用jquery写的判断div滚动条到底部的方法【推荐】
2016/04/29 Javascript
windows 下安装nodejs 环境变量设置
2017/02/02 NodeJs
jQuery控制元素隐藏和显示
2017/03/03 Javascript
微信小程序request出现400的问题解决办法
2017/05/23 Javascript
微信小程序实现拖拽 image 触摸事件监听的实例
2017/08/17 Javascript
一篇文章,教你学会Vue CLI 插件开发
2019/04/17 Javascript
[01:08]2014DOTA2展望TI 剑指西雅图LGD战队专访
2014/06/30 DOTA
python基础教程之常用运算符
2014/08/29 Python
在Python下进行UDP网络编程的教程
2015/04/29 Python
Python 实现简单的shell sed替换功能(实例讲解)
2017/09/29 Python
Python分析学校四六级过关情况
2017/11/22 Python
django在接受post请求时显示403forbidden实例解析
2018/01/25 Python
python 读取txt,json和hdf5文件的实例
2018/06/05 Python
关于Django ForeignKey 反向查询中filter和_set的效率对比详解
2018/12/15 Python
详解Python循环作用域与闭包
2019/03/21 Python
如何解决django-celery启动后迅速关闭
2019/10/16 Python
Python numpy数组转置与轴变换
2019/11/15 Python
python3中calendar返回某一时间点实例讲解
2020/11/18 Python
python 删除系统中的文件(按时间,大小,扩展名)
2020/11/19 Python
网上商城创业计划书范文
2014/01/31 职场文书
"9.18"国耻日演讲稿范文
2014/09/14 职场文书
2014年圣诞节寄语
2014/12/08 职场文书
2016五四青年节活动总结范文
2016/04/06 职场文书
学校学习型党组织建设心得体会
2019/06/21 职场文书
python如何利用traceback获取详细的异常信息
2021/06/05 Python
Java网络编程之UDP实现原理解析
2021/09/04 Java/Android
Python 实现Mac 屏幕截图详解
2021/10/05 Python