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&amp;java(三)
Oct 09 PHP
杏林同学录(八)
Oct 09 PHP
几种显示数据的方法的比较
Oct 09 PHP
检查php文件中是否含有bom的函数
May 31 PHP
php设计模式之观察者模式的应用详解
May 21 PHP
深入php 正则表达式的学习探讨
Jun 06 PHP
windows7下安装php的php-ssh2扩展教程
Jul 04 PHP
初识php MVC
Sep 10 PHP
深入讲解PHP的Yii框架中的属性(Property)
Mar 18 PHP
php利用imagemagick实现复古老照片效果实例
Feb 16 PHP
laravel实现分页样式替换示例代码(增加首、尾页)
Sep 22 PHP
PHP设计模式入门之迭代器模式原理与实现方法分析
Apr 26 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
apache和php之间协同工作的配置经验分享
2013/04/08 PHP
PHP批量检测并去除文件BOM头代码实例
2014/05/08 PHP
总结PHP删除字符串最后一个字符的三种方法
2016/08/30 PHP
php语法检查的方法总结
2019/01/21 PHP
JQUERY THICKBOX弹出层插件
2008/08/30 Javascript
关于js获取radio和select的属性并控制的代码
2011/05/12 Javascript
web的各种前端打印方法之jquery打印插件PrintArea实现网页打印
2013/01/09 Javascript
jquery选择器排除某个DOM元素的方法(实例演示)
2014/04/25 Javascript
教你在heroku云平台上部署Node.js应用
2014/07/30 Javascript
JavaScript设计模式之原型模式(Object.create与prototype)介绍
2014/12/28 Javascript
jQuery将所有被选中的checkbox某个属性值连接成字符串的方法
2015/01/24 Javascript
JavaScript编写连连看小游戏
2015/07/07 Javascript
jquery+CSS3模拟Path2.0动画菜单效果代码
2015/08/31 Javascript
JavaScript判断变量是否为数组的方法(Array)
2016/02/24 Javascript
利用jQuery对无序列表排序的简单方法
2016/10/16 Javascript
浅谈jquery的html方法里包含特殊字符的处理
2016/11/30 Javascript
解决ajax不能访问本地文件问题(利用js跨域原理)
2017/01/24 Javascript
详解Sea.js中Module.exports和exports的区别
2017/02/12 Javascript
vue项目中实现缓存的最佳方案详解
2019/07/11 Javascript
基于vue 实现表单中password输入的显示与隐藏功能
2019/07/19 Javascript
详解vue-cli项目开发/生产环境代理实现跨域请求
2019/07/23 Javascript
Nodejs监听日志文件的变化的过程解析
2019/08/04 NodeJs
js事件机制----捕获与冒泡机制实例分析
2020/05/22 Javascript
js屏蔽F12审查元素,禁止修改页面代码等实现代码
2020/10/02 Javascript
Python类的多重继承问题深入分析
2014/11/09 Python
列举Python中吸引人的一些特性
2015/04/09 Python
python Django框架实现自定义表单提交
2016/03/25 Python
python docx 中文字体设置的操作方法
2018/05/08 Python
Python对接六大主流数据库(只需三步)
2019/07/31 Python
Python 如何优雅的将数字转化为时间格式的方法
2019/09/26 Python
简单介绍django提供的加密算法
2019/12/18 Python
瑞典Happy Socks美国官网:购买色彩斑斓的快乐袜子
2016/10/19 全球购物
世界上最悠久的自行车制造商:Ribble Cycles
2017/03/18 全球购物
英语教育专业自荐信
2014/05/29 职场文书
作风整顿个人剖析材料
2014/10/06 职场文书
接触艺术对孩子学习思维有益
2019/08/06 职场文书