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 多线程上下文中安全写文件实现代码
Dec 28 PHP
ie与session丢失(新窗口cookie丢失)实测及解决方案
Jul 15 PHP
怎样使用php与jquery设置和读取cookies
Aug 08 PHP
php var_export与var_dump 输出的不同
Aug 09 PHP
浅谈PHP接收POST数据方式
Jun 05 PHP
php实现word转html的方法
Jan 22 PHP
php注册登录系统简化版
Dec 28 PHP
深入理解PHP原理之执行周期分析
Jun 01 PHP
php实现留言板功能(代码详解)
Mar 28 PHP
Laravel 5.4重新登录实现跳转到登录前页面的原理和方法
Jul 13 PHP
Laravel中日期时间处理包Carbon的简单使用
Sep 21 PHP
分享5个非常有用的Laravel Blade指令
May 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 设计模式之 单例模式
2008/12/19 PHP
php中获取指定IP的物理地址的代码(正则表达式)
2011/06/23 PHP
PHP利用超级全局变量$_GET来接收表单数据的实例
2016/11/05 PHP
Laravel如何使用Redis共享Session
2018/02/23 PHP
PHP常用字符串函数用法实例总结
2020/06/04 PHP
优化 JavaScript 代码的方法小结
2009/07/16 Javascript
JS 中document.URL 和 windows.location.href 的区别
2009/11/11 Javascript
简介JavaScript中fixed()方法的使用
2015/06/08 Javascript
jQuery.cookie.js使用方法及相关参数解释
2017/03/06 Javascript
layui导航栏实现代码
2017/05/19 Javascript
vue中路由验证和相应拦截的使用详解
2017/12/13 Javascript
解决Vue.js父组件$on无法监听子组件$emit触发事件的问题
2018/09/12 Javascript
js实现点击展开隐藏效果(实例代码)
2018/09/28 Javascript
基于ant design日期控件使用_仅月份的操作
2020/10/27 Javascript
swiper实现导航滚动效果
2020/12/13 Javascript
JS实现公告上线滚动效果
2021/01/10 Javascript
Python优化技巧之利用ctypes提高执行速度
2016/09/11 Python
浅谈python socket函数中,send与sendall的区别与使用方法
2017/05/09 Python
用tensorflow搭建CNN的方法
2018/03/05 Python
Pandas读写CSV文件的方法示例
2019/03/27 Python
基于YUV 数据格式详解及python实现方式
2019/12/09 Python
Python面向对象程序设计之静态方法、类方法、属性方法原理与用法分析
2020/03/23 Python
keras 读取多标签图像数据方式
2020/06/12 Python
CSS3 文字动画效果
2020/11/12 HTML / CSS
Notino匈牙利:购买香水和化妆品
2019/04/12 全球购物
Bath & Body Works阿联酋:在线购买沐浴和身体用品
2021/02/27 全球购物
什么是聚集索引和非聚集索引
2012/01/17 面试题
中英文自我评价常用句型
2013/12/19 职场文书
外企办公室竞聘演讲稿
2013/12/29 职场文书
小学生读书感言
2014/02/12 职场文书
学雷锋志愿者活动方案
2014/08/21 职场文书
个人遵守党的政治纪律情况对照检查材料
2014/09/26 职场文书
党性修养心得体会2016
2016/01/21 职场文书
python通配符之glob模块的使用详解
2021/04/24 Python
Pytorch GPU内存占用很高,但是利用率很低如何解决
2021/06/01 Python
python中Matplotlib绘制直线的实例代码
2021/07/04 Python