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的配置文件php.ini
Oct 09 PHP
PHP 读取文件的正确方法
Apr 29 PHP
php 错误处理经验分享
Oct 11 PHP
PHP中使用strpos函数实现屏蔽敏感关键字功能
Aug 21 PHP
smarty模板引擎基础知识入门
Mar 30 PHP
PHP中SESSION的注销与清除
Apr 16 PHP
php通过获取头信息判断图片类型的方法
Jun 26 PHP
Laravel实现构造函数自动依赖注入的方法
Mar 16 PHP
自制PHP框架之设计模式
May 07 PHP
浅谈PHP中new self()和new static()的区别
Aug 11 PHP
PHP 进度条函数的简单实例
Sep 19 PHP
laravel 数据验证规则详解
Oct 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
php初学者写及时补给skype用户充话费的小程序
2008/11/02 PHP
PHP 输出简单动态WAP页面
2009/06/09 PHP
PHP截取IE浏览器并缩小原图的方法
2016/03/04 PHP
php json相关函数用法示例
2017/03/28 PHP
javascript document.referrer 用法
2009/04/30 Javascript
判断客户浏览器是否支持cookie的示例代码
2013/12/23 Javascript
javascript日期对象格式化为字符串的实现方法
2014/01/14 Javascript
用html+css+js实现的一个简单的图片切换特效
2014/05/28 Javascript
JavaScript拖拽、碰撞、重力及弹性运动实例分析
2016/01/08 Javascript
Bootstrap模态框水平垂直居中与增加拖拽功能
2016/11/09 Javascript
JavaScript Date 知识浅析
2017/01/29 Javascript
JavaScript中值类型和引用类型的区别
2017/02/23 Javascript
js实现多行文本框统计剩余字数功能
2017/03/28 Javascript
JS简单实现获取元素的封装操作示例
2017/04/07 Javascript
axios拦截设置和错误处理方法
2018/03/05 Javascript
echarts设置图例颜色和地图底色的方法实例
2018/08/01 Javascript
微信小程序模板消息推送的两种实现方式
2019/08/27 Javascript
vue3实现v-model原理详解
2019/10/09 Javascript
微信域名检测接口调用演示步骤(含PHP、Python)
2019/12/08 Javascript
vue el-table实现自定义表头
2019/12/11 Javascript
Vue实现摇一摇功能(兼容ios13.3以上)
2021/01/26 Vue.js
理解Python中的With语句
2016/03/18 Python
Python实现的多线程同步与互斥锁功能示例
2017/11/30 Python
详解爬虫被封的问题
2019/04/23 Python
浅谈PySpark SQL 相关知识介绍
2019/06/14 Python
基于Python获取照片的GPS位置信息
2020/01/20 Python
解决matplotlib.pyplot在Jupyter notebook中不显示图像问题
2020/04/22 Python
Python 绘制可视化折线图
2020/07/22 Python
python 实现性别识别
2020/11/21 Python
Python爬虫中Selenium实现文件上传
2020/12/04 Python
HTML5新增的表单元素和属性实例解析
2014/07/07 HTML / CSS
HTML实现代码雨源码及效果示例
2020/02/25 HTML / CSS
薇姿法国官网:Vichy法国
2021/01/28 全球购物
党的群众教育实践活动实施方案
2014/06/12 职场文书
单位工作证明范文
2014/09/14 职场文书
小学五年级班主任工作经验交流材料
2015/11/02 职场文书