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 str_replace的替换漏洞
Mar 15 PHP
php下删除字符串中HTML标签的函数
Aug 27 PHP
PHP5 操作MySQL数据库基础代码
Sep 29 PHP
PHP获取MAC地址的函数代码
Sep 11 PHP
php 生成自动创建文件夹并上传文件的示例代码
Mar 07 PHP
php sybase_fetch_array使用方法
Apr 15 PHP
详解PHP对象的串行化与反串行化
Jan 24 PHP
php cookie用户登录的详解及实例代码
Jan 03 PHP
php ajax confirm 删除实例详解
Mar 06 PHP
[原创]PHP global全局变量经典应用与注意事项分析【附$GLOBALS用法对比】
Jul 12 PHP
php5对象复制、clone、浅复制与深复制实例详解
Aug 14 PHP
laravel实现登录时监听事件,添加登录用户的记录方法
Sep 30 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实现将几张照片拼接到一起的合成图片功能【便于整体打印输出】
2017/11/14 PHP
PHP htmlspecialchars() 函数实例代码及用法大全
2018/09/18 PHP
PHP fprintf()函数用法讲解
2019/02/16 PHP
javascript列表框操作函数集合汇总
2013/11/28 Javascript
JavaScript中合并数组的N种方法
2014/09/16 Javascript
JavaScript极简入门教程(三):数组
2014/10/25 Javascript
node.js中的fs.fsync方法使用说明
2014/12/15 Javascript
谈谈target=_new和_blank的不同之处
2016/10/25 Javascript
输入框点击时边框变色效果的实现方法
2016/12/26 Javascript
JQuery实现图片轮播效果
2017/05/08 jQuery
jQuery实现 RadioButton做必选校验功能
2017/06/15 jQuery
将angular.js项目整合到.net mvc中的方法详解
2017/06/29 Javascript
基于jstree使用AJAX请求获取数据形成树
2017/08/29 Javascript
微信小程序实现点击按钮修改字体颜色功能【附demo源码下载】
2017/12/05 Javascript
基于Vue的ajax公共方法(详解)
2018/01/20 Javascript
vue中$refs的用法及作用详解
2018/04/24 Javascript
详解create-react-app 2.0版本如何启用装饰器语法
2018/10/23 Javascript
vuex的module模块用法示例
2018/11/12 Javascript
微信小程序常用赋值方法小结
2019/04/30 Javascript
vue实现微信浏览器左上角返回按钮拦截功能
2020/01/18 Javascript
JavaScript canvas绘制圆弧与圆形
2020/02/18 Javascript
JS实现电脑虚拟键盘的操作
2020/06/24 Javascript
vue实现简易的双向数据绑定
2020/12/29 Vue.js
python中matplotlib的颜色及线条控制的示例
2018/03/16 Python
Python定时任务框架APScheduler原理及常用代码
2020/10/05 Python
英国、欧洲和全球租车服务:Avis英国
2016/08/29 全球购物
德国柯吉澳趣味家居:Koziol
2017/08/24 全球购物
Sunglasses Shop英国:欧洲领先的太阳镜在线供应商之一
2018/09/19 全球购物
大学四年个人的自我评价
2014/02/26 职场文书
《孙权劝学》教学反思
2014/04/23 职场文书
党员干部作风建设思想汇报范文
2014/10/25 职场文书
幼儿园教师自荐书
2015/03/06 职场文书
总结会主持词
2015/07/02 职场文书
公司费用报销管理制度
2015/08/04 职场文书
公司档案管理制度
2015/08/05 职场文书
OpenCV实现反阈值二值化
2021/11/17 Java/Android