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中数据的批量导入(csv文件)
Oct 09 PHP
新版mysql+apache+php Linux安装指南
Oct 09 PHP
聊天室php&amp;mysql(四)
Oct 09 PHP
php 自写函数代码 获取关键字 去超链接
Feb 08 PHP
为IP查询添加GOOGLE地图功能的代码
Aug 08 PHP
php使浏览器直接下载pdf文件的方法
Nov 15 PHP
php实现执行某一操作时弹出确认、取消对话框
Dec 30 PHP
smarty模板引擎从配置文件中获取数据的方法
Jan 22 PHP
PHP.vs.JAVA
Apr 29 PHP
php微信支付接口开发程序
Aug 02 PHP
thinkphp制作404跳转页的简单实现方法
Sep 22 PHP
Laravel6.2中用于用户登录的新密码确认流程详解
Oct 16 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
把77A收信机改造成收音机
2021/03/02 无线电
改德生G88 - 加装等响度低音提升电路
2021/03/02 无线电
php中关于普通表单多文件上传的处理方法
2011/03/25 PHP
解析thinkphp基本配置 convention.php
2013/06/18 PHP
php中通过curl检测页面是否被百度收录
2013/09/27 PHP
php调用google接口生成二维码示例
2014/04/28 PHP
PHP读取文本文件并逐行输出该行使用最多的字符与对应次数的方法
2016/11/25 PHP
Javascript和Ajax中文乱码吐血版解决方案
2009/12/21 Javascript
JQuery 操作Javascript对象和数组的工具函数小结
2010/01/22 Javascript
javascript delete 使用示例代码
2010/03/29 Javascript
jQuery 选择器、DOM操作、事件、动画
2010/11/25 Javascript
最短的IE判断代码
2011/03/13 Javascript
js传参数受特殊字符影响错误的解决方法
2013/10/21 Javascript
js实现从右向左缓缓浮出网页浮动层广告的方法
2015/05/09 Javascript
node.js实现端口转发
2016/04/14 Javascript
VC调用javascript的几种方法(推荐)
2016/08/09 Javascript
Vue.js实现图片的随意拖动方法
2018/03/08 Javascript
vue视图不更新情况详解
2019/05/16 Javascript
JS实现选项卡插件的两种写法(jQuery和class)
2020/12/30 jQuery
[01:56]无止竞 再出发——中国军团出征2017年DOTA2国际邀请赛
2017/07/05 DOTA
举例讲解Python中metaclass元类的创建与使用
2016/06/30 Python
pandas DataFrame 删除重复的行的实现方法
2019/01/29 Python
Django CBV类的用法详解
2019/07/26 Python
利用python计算windows全盘文件md5值的脚本
2019/07/27 Python
tensorflow 固定部分参数训练,只训练部分参数的实例
2020/01/20 Python
Python新手如何理解循环加载模块
2020/05/29 Python
python模拟点击玩游戏的实例讲解
2020/11/26 Python
Asics日本官网:鬼冢八喜郎创立的跑鞋运动品牌
2017/10/18 全球购物
Belvilla法国:休闲度假房屋出租
2020/10/03 全球购物
消防安全标语
2014/06/07 职场文书
研究生就业推荐表导师评语
2014/12/31 职场文书
无锡灵山大佛导游词
2015/02/09 职场文书
2015年思想品德教学工作总结
2015/07/22 职场文书
2015年十月一日放假通知
2015/08/18 职场文书
检讨书范文
2019/04/16 职场文书
Nginx同一个域名配置多个项目的实现方法
2021/03/31 Servers