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 相关文章推荐
ajax实现无刷新分页(php)
Jul 18 PHP
在项目中寻找代码的坏命名
Jul 14 PHP
百度工程师讲PHP函数的实现原理及性能分析(三)
May 13 PHP
php计算多维数组中所有值总和的方法
Jun 24 PHP
PHP框架性能测试报告
May 08 PHP
Yii2 hasOne(), hasMany() 实现三表关联的方法(两种)
Feb 15 PHP
PHP如何读取由JavaScript设置的Cookie
Mar 22 PHP
详解PHP文件的自动加载(autoloading)
Feb 04 PHP
PHP使用标准库spl实现的观察者模式示例
Aug 04 PHP
php+mysql开发中的经验与常识小结
Mar 25 PHP
基于laravel-admin 后台 列表标签背景的使用方法
Oct 03 PHP
PHP的Trait机制原理与用法分析
Oct 18 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中遇到BOM、编码导致json_decode函数无法解析问题
2014/07/02 PHP
yii,CI,yaf框架+smarty模板使用方法
2015/12/29 PHP
复制本贴标题和地址的js代码
2008/07/01 Javascript
js 单引号 传递方法
2009/06/22 Javascript
JavaScript 10件让人费解的事情
2010/02/15 Javascript
用js正确判断用户名cookie是否存在的方法
2014/01/28 Javascript
基于JQuery实现的图片自动进行缩放和裁剪处理
2014/01/31 Javascript
Js表格万条数据瞬间加载实现代码
2014/02/20 Javascript
javascript实现点击提交按钮后显示loading的方法
2015/07/03 Javascript
jQuery判断checkbox选中状态
2016/05/12 Javascript
jquery封装插件时匿名函数形参和实参的写法解释
2017/02/14 Javascript
Bootstrap布局之栅格系统学习笔记
2017/05/04 Javascript
基于LayUI分页和LayUI laypage分页的使用示例
2017/08/02 Javascript
细说webpack源码之compile流程-rules参数处理技巧(1)
2017/12/26 Javascript
通过 JS 判断页面是否有滚动条的实现方法
2018/04/05 Javascript
使用70行Python代码实现一个递归下降解析器的教程
2015/04/17 Python
为Python的Tornado框架配置使用Jinja2模板引擎的方法
2016/06/30 Python
Python数据分析之真实IP请求Pandas详解
2016/11/18 Python
Python数据拟合与广义线性回归算法学习
2017/12/22 Python
Python实现简易Web爬虫详解
2018/01/03 Python
selenium+python自动化测试之环境搭建
2019/01/23 Python
如何在Django中添加没有微秒的 DateTimeField 属性详解
2019/01/30 Python
python异步实现定时任务和周期任务的方法
2019/06/29 Python
在python中做正态性检验示例
2019/12/09 Python
python实现word文档批量转成自定义格式的excel文档的思路及实例代码
2020/02/21 Python
python3格式化字符串 f-string的高级用法(推荐)
2020/03/04 Python
Python中的整除和取模实例
2020/06/03 Python
CSS3制作气泡对话框的实例教程
2016/05/10 HTML / CSS
html5的画布canvas——画出简单的矩形、三角形实例代码
2013/06/09 HTML / CSS
HTML5新标签兼容——&gt; 的两种方法
2018/09/12 HTML / CSS
Expedia西班牙:预订酒店、机票、旅行和廉价度假套餐
2019/04/10 全球购物
21岁生日感言
2014/02/27 职场文书
学校募捐倡议书
2014/05/14 职场文书
团日活动总结报告
2014/06/25 职场文书
民间借贷借条如何写
2015/05/26 职场文书
2015年教师节主持词
2015/07/03 职场文书