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 相关文章推荐
phpmyadmin 3.4 空密码登录的实现方法
May 29 PHP
PHP多个版本的分析解释
Jul 21 PHP
基于php split()函数的用法详解
Jun 05 PHP
php 在windows下配置虚拟目录的方法介绍
Jun 26 PHP
PHP处理大量表单字段的便捷方法
Feb 07 PHP
php运行时动态创建函数的方法
Mar 16 PHP
PHP结合Ueditor并修改图片上传路径
Oct 16 PHP
thinkPHP5.0框架验证码调用及点击图片刷新简单实现方法
Sep 07 PHP
Yii Framework框架使用PHPExcel组件的方法示例
Jul 24 PHP
php适配器模式简单应用示例
Oct 23 PHP
Laravel等框架模型关联的可用性浅析
Dec 15 PHP
PHP代码覆盖率统计详解
Jul 22 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面向对象全攻略 (十七) 自动加载类
2009/09/30 PHP
PHP程序员面试 切忌急功近利(更需要注重以后的发展)
2010/09/01 PHP
PHP四大安全策略
2014/03/12 PHP
PHP函数超时处理方法
2016/02/14 PHP
PHP Smarty模版简单使用方法
2016/03/30 PHP
PHP数组函数array_multisort()用法实例分析
2016/04/02 PHP
PHP水印类,支持添加图片、文字、填充颜色区域的实现
2017/02/04 PHP
Laravel框架使用Seeder实现自动填充数据功能
2018/06/13 PHP
Firefox/Chrome/Safari的中可直接使用$/$$函数进行调试
2012/02/13 Javascript
jquery选择器的选择使用及性能介绍
2013/01/16 Javascript
javascript快速排序算法详解
2014/09/17 Javascript
jquery实现简单Tab切换菜单效果
2020/07/17 Javascript
Angular ng-class详解及实例代码
2016/09/19 Javascript
手机移动端实现 jquery和HTML5 Canvas的幸运大奖盘特效
2016/12/06 Javascript
JavaScript中的普通函数和箭头函数的区别和用法详解
2017/03/21 Javascript
从零开始学习Node.js系列教程三:图片上传和显示方法示例
2017/04/13 Javascript
使用node.js搭建服务器
2017/05/20 Javascript
javascript获取select值的方法完整实例
2019/06/20 Javascript
浅谈layui分页控件field参数接收对象的问题
2019/09/20 Javascript
[00:32]2018DOTA2亚洲邀请赛iG出场
2018/04/03 DOTA
[01:31:02]TNC vs VG 2019国际邀请赛淘汰赛 胜者组赛BO3 第一场
2019/08/22 DOTA
python实现的登陆Discuz!论坛通用代码分享
2014/07/11 Python
使用python实现接口的方法
2017/07/07 Python
python技能之数据导出excel的实例代码
2017/08/11 Python
python使用opencv按一定间隔截取视频帧
2018/03/06 Python
Python实现 PS 图像调整中的亮度调整
2019/06/28 Python
Python获取对象属性的几种方式小结
2020/03/12 Python
在django admin中配置搜索域是一个外键时的处理方法
2020/05/20 Python
租租车:国际租车、美国租车、欧洲租车、特价预订国外租车(中文服务)
2018/03/28 全球购物
俄罗斯三星品牌商店:Samsungstore
2020/04/05 全球购物
应届毕业生的个人自我鉴定
2013/10/24 职场文书
违反学校规定检讨书
2014/01/18 职场文书
基层党组织公开承诺书
2014/03/28 职场文书
Angular CLI发布路径的配置项浅析
2021/03/29 Javascript
Java中使用Filter过滤器的方法
2021/06/28 Java/Android
MySQL 原理与优化之Update 优化
2022/08/14 MySQL