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 相关文章推荐
Windows Apache2.2.11及Php5.2.9-1的安装与配置方法
Jun 08 PHP
php生成随机密码的三种方法小结
Sep 04 PHP
使用dump函数,给php加断点测试
Jun 25 PHP
php实现word转html的方法
Jan 22 PHP
Zend Framework教程之Application用法实例详解
Mar 14 PHP
CI框架集成Smarty的方法分析
May 17 PHP
PHP array_key_exists检查键名或索引是否存在于数组中的实现方法
Jun 13 PHP
php mongodb操作类 带几个简单的例子
Aug 25 PHP
php使用Jpgraph创建柱状图展示年度收支表效果示例
Feb 15 PHP
php面向对象的用户登录身份验证
Jun 08 PHP
PHP截取发动短信内容的方法
Jul 04 PHP
php引用和拷贝的区别知识点总结
Sep 23 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
第十一节 重载 [11]
2006/10/09 PHP
php中json_decode()和json_encode()的使用方法
2012/06/04 PHP
PHP表单递交控件名称含有点号(.)会被转化为下划线(_)的处理方法
2013/01/06 PHP
PHP中的正则表达式实例详解
2017/04/25 PHP
提高 DHTML 页面性能
2006/12/25 Javascript
用JavaScript和注册表脚本实现右键收藏Web页选中文本
2007/01/28 Javascript
弹出广告特效代码(一个IP只弹出一次)
2007/05/11 Javascript
innertext , insertadjacentelement , insertadjacenthtml , insertadjacenttext 等区别
2007/06/29 Javascript
基于jquery的返回顶部效果(兼容IE6)
2011/01/17 Javascript
Javascript 八进制转义字符(8进制)
2011/04/08 Javascript
Ajax执行顺序流程及回调问题分析
2012/12/10 Javascript
用js实现trim()的解决办法
2013/04/16 Javascript
JS实现可改变列宽的table实例
2013/07/02 Javascript
jquery简单实现鼠标经过导航条改变背景图
2013/12/17 Javascript
jQuery基础知识点总结(必看)
2016/05/31 Javascript
canvas实现探照灯效果
2017/02/07 Javascript
简单实现AngularJS轮播图效果
2020/04/10 Javascript
Angular开发者指南之入门介绍
2017/03/05 Javascript
js+canvas实现动态吃豆人效果
2017/03/22 Javascript
JS把字符串格式的时间转换成几秒前、几分钟前、几小时前、几天前等格式
2019/07/10 Javascript
vue3.0 的 Composition API 的使用示例
2020/10/26 Javascript
python使用arcpy.mapping模块批量出图
2017/03/06 Python
Python爬虫DOTA排行榜爬取实例(分享)
2017/06/13 Python
Python实现的排列组合、破解密码算法示例
2019/04/12 Python
Python实现FTP文件传输的实例
2019/07/07 Python
python利用openpyxl拆分多个工作表的工作簿的方法
2019/09/27 Python
python GUI库图形界面开发之PyQt5线程类QThread详细使用方法
2020/02/26 Python
浅谈python opencv对图像颜色通道进行加减操作溢出
2020/06/03 Python
python3实现将json对象存入Redis以及数据的导入导出
2020/07/16 Python
Django搭建项目实战与避坑细节详解
2020/12/06 Python
质量月活动策划方案
2014/03/10 职场文书
《第一次抱母亲》教学反思
2014/04/16 职场文书
清明节演讲稿
2014/05/27 职场文书
中学生自我评价范文
2015/03/03 职场文书
CSS 文字装饰 text-decoration & text-emphasis 详解
2021/04/06 HTML / CSS
redis cluster支持pipeline的实现思路
2021/06/23 Redis