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 debug 安装技巧
Apr 30 PHP
php数组去重的函数代码
Feb 03 PHP
深入phpMyAdmin的安装与配置的详细步骤
May 07 PHP
让ThinkPHP支持大小写url地址访问的方法
Oct 31 PHP
PHP实现阳历到农历转换的类实例
Mar 07 PHP
给WordPress中的留言加上楼层号的PHP代码实例
Dec 14 PHP
php实现登陆模块功能示例
Oct 20 PHP
PHP实现的链式队列结构示例
Sep 15 PHP
ajax+php实现无刷新验证手机号的实例
Dec 22 PHP
详解PHP 二维数组排序保持键名不变
Mar 06 PHP
PHP架构及原理知识点详解
Dec 22 PHP
YII2框架中ActiveDataProvider与GridView的配合使用操作示例
Mar 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 方便水印和缩略图的图形类
2009/05/21 PHP
PHP连接SQLServer2005方法及代码
2013/12/26 PHP
php正则判断是否为合法身份证号的方法
2017/03/16 PHP
解决thinkphp5未定义变量会抛出异常,页面错误,请稍后再试的问题
2019/10/16 PHP
PHP反射基础知识回顾
2020/09/10 PHP
javascript IE中的DOM ready应用技巧
2008/07/23 Javascript
JQuery 引发两次$(document.ready)事件
2010/01/15 Javascript
JS中Iframe之间传值及子页面与父页面应用
2013/03/11 Javascript
用jquery实现的一个超级简单的下拉菜单
2014/05/18 Javascript
Javascript保存网页为图片借助于html2canvas库实现
2014/09/05 Javascript
js网页滚动条滚动事件实例分析
2015/05/05 Javascript
Node.js编写爬虫的基本思路及抓取百度图片的实例分享
2016/03/12 Javascript
javascript拖拽应用实例
2016/03/25 Javascript
Jquery获取第一个子元素简单实例
2016/06/02 Javascript
js下载文件并修改文件名
2017/05/08 Javascript
浅谈webpack下的AOP式无侵入注入
2017/11/12 Javascript
JS前端知识点总结之内置对象,日期对象和定时器相关操作
2019/07/05 Javascript
Linux下使用python自动修改本机网关代码分享
2015/05/21 Python
Python for Informatics 第11章 正则表达式(一)
2016/04/21 Python
使用paramiko远程执行命令、下发文件的实例
2017/10/01 Python
python表格存取的方法
2018/03/07 Python
Python类装饰器实现方法详解
2018/12/21 Python
Django中密码的加密、验密、解密操作
2019/12/19 Python
Python Json数据文件操作原理解析
2020/05/09 Python
python中列表的含义及用法
2020/05/26 Python
Banggood官网:面向全球客户的综合商城
2017/04/19 全球购物
办公室文员工作职责
2014/01/31 职场文书
英文推荐信格式范文
2014/05/09 职场文书
领导干部个人整改措施落实情况汇报
2014/10/29 职场文书
文化苦旅读书笔记
2015/06/29 职场文书
最新的离婚协议书范本!
2019/07/02 职场文书
详解Vue的options
2021/05/15 Vue.js
Python 读写 Matlab Mat 格式数据的操作
2021/05/19 Python
python 实现图与图之间的间距调整subplots_adjust
2021/05/21 Python
sql中mod()函数取余数的用法
2021/05/29 SQL Server
浅谈react useEffect闭包的坑
2021/06/08 Javascript