实例简介PHP的一些高级面向对象编程的特性


Posted in PHP onNovember 27, 2015

一般来说,学习PHP需要了解下面的一些特性:

对象克隆。PHP5中对OOP模型的主要改进之一,是将所有对象都看作引用,而不是值。但是,如果所有对象都视为引用,那么如何创建对象的副本呢?答案是通过克隆对象。

<?php
class Corporate_Drone{
 private $employeeid;
 private $tiecolor;
 function setEmployeeID($employeeid) {
 $this->employeeid = $employeeid;
 }

 function getEmployeeID() {
 return $this->employeeid;
 }
 
 function setTiecolor($tiecolor) {
 $this->tiecolor = $tiecolor;
 }
 
 function getTiecolor() {
 return $this->tiecolor;
 }
}

$drone1 = new Corporate_Drone();
$drone1->setEmployeeID("12345");
$drone1->setTiecolor("red");
$drone2 = clone $drone1;
$drone2->setEmployeeID("67890");

printf("drone1 employeeID:%d <br />",$drone1->getEmployeeID());
printf("drone1 tie color:%s <br />",$drone1->getTiecolor());
printf("drone2 employeeID:%d <br />",$drone2->getEmployeeID());
printf("drone2 tie color:%s <br />",$drone2->getTiecolor());
?>

继承。如前面所述,通过继承来构建类层次体系是OOP的关键概念。

class Employee {
 ...
}

class Executive extends Employee{
 ...
}

class CEO extends Executive{
 ...
}

接口。接口是一些未实现的方法定义和常量的集合,相当于一种类蓝本。接口只定义了类能做什么,而不涉及实现的细节。本章介绍PHP5对接口的支持,并提供了一些展示这个强大OOP特性的例子。

<?php
interface IPillage
{
 // CONST 1;
 function emptyBankAccount();
 function burnDocuments();
}

class Employee {

}

class Excutive extends Employee implements IPillage {
 private $totalStockOptions;
 function emptyBankAccount() {
 echo "Call CFO and ask to transfer funds to Swiss bank account";
 }
 function burnDocuments() {
 echo "Torch the office suite.";
 }
}

class test {
 function testIP(IPillage $ib) {
 echo $ib->emptyBankAccount();
 }
}
$excutive = new Excutive();
$test = new test();
echo $test->testIP($excutive);
?>

抽象类。抽象类实质上就是无法实例化的类。抽象类将由可实例化的类继承,后者称为具体类(concreate class)。抽象类可以完全实现、部分实现或者根本未实现。

abstract class Class_name
{
 //insert attribute definitions here
 //insert method definitions here
}

命名空间。命名空间可根据上下文划分各种库和类,帮肋你更为有效地管理代码库。

<?php
namespace Library;
class Clean {
 function printClean() {
 echo "Clean...";
 }
}
?>

<?php
include "test.php";
$clean = new \Library\Clean();
$clean->printClean();
?>

如果你使用过其他面向对象语言,可能会感到奇怪,为什么上述特性没有包括其他语言中熟悉的一些OOP特性?原因很简单,PHP不支持这些特性。为了让你不再感到迷惑,下面列出PHP不支持的高级OOP特性。

  • 方法重载。PHP不支持通过函数重载实现多态,根据Zend网站的讨论,可能永远都不会支持。要了解具体原因,可以查看http://www.zend.com/php/ask_experts.php
  • 操作符重载。目前不支持根据所修改数据的类型为操作符赋予新的含义。根据zend网站的讨论,将来实现这个特性的可能性也不大。
  • 多重继承。PHP不支持多重继承。但是支持实现多个接口。
PHP 相关文章推荐
基于PHP常用字符串的总结(待续)
Jun 07 PHP
什么情况下可以不写PHP的闭合标签“?&gt;”
Aug 28 PHP
php中file_get_content 和curl以及fopen 效率分析
Sep 19 PHP
php使用正则表达式获取图片url的方法
Jan 16 PHP
php+mysqli使用面向对象方式更新数据库实例
Jan 29 PHP
使用PHP生成二维码的方法汇总
Jul 22 PHP
WordPress特定文章对搜索引擎隐藏或只允许搜索引擎查看
Dec 31 PHP
php基于dom实现的图书xml格式数据示例
Feb 03 PHP
PHP调用Mailgun发送邮件的方法
May 04 PHP
php中错误处理操作实例分析
Aug 23 PHP
解决thinkphp5未定义变量会抛出异常,页面错误,请稍后再试的问题
Oct 16 PHP
phpmyadmin在宝塔面板里进不去的解决方案
Jul 06 PHP
PHP编程中的__clone()方法使用详解
Nov 27 #PHP
PHP通过反射动态加载第三方类和获得类源码的实例
Nov 27 #PHP
基于php实现随机合并数组并排序(原排序)
Nov 26 #PHP
PHP随手笔记整理之PHP脚本和JAVA连接mysql数据库
Nov 25 #PHP
php实现遍历多维数组的方法
Nov 25 #PHP
WordPress迁移时一些常见问题的解决方法整理
Nov 24 #PHP
基础的WordPress插件制作教程
Nov 24 #PHP
You might like
收音机发烧友应当熟知的100条知识
2021/03/02 无线电
adodb与adodb_lite之比较
2006/12/31 PHP
PHP中实现Bloom Filter算法
2015/03/30 PHP
php实现中文转数字
2016/02/18 PHP
非常好的js代码
2006/06/27 Javascript
让你的博文自动带上缩址的实现代码,方便发到微博客上
2010/12/28 Javascript
扩展JavaScript功能的正确方法(译文)
2012/04/12 Javascript
javascript的console.log()用法小结
2012/05/31 Javascript
PhotoShop给图片自动添加边框及EXIF信息的JS脚本
2015/02/15 Javascript
jquery配合.NET实现点击指定绑定数据并且能够一键下载
2016/10/28 Javascript
JS实现的集合去重,交集,并集,差集功能示例
2018/03/13 Javascript
vue 实现在函数中触发路由跳转的示例
2018/09/01 Javascript
js实现抽奖的两种方法
2020/03/19 Javascript
vue实现移动端拖动排序
2020/08/21 Javascript
[01:01:18]VP vs NIP 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
仅用500行Python代码实现一个英文解析器的教程
2015/04/02 Python
在Python中封装GObject模块进行图形化程序编程的教程
2015/04/14 Python
详解Python pygame安装过程笔记
2017/06/05 Python
Python引用传值概念与用法实例小结
2017/10/07 Python
django框架防止XSS注入的方法分析
2019/06/21 Python
Django CBV与FBV原理及实例详解
2019/08/12 Python
Python操作MySQL数据库实例详解【安装、连接、增删改查等】
2020/01/17 Python
HTML5之SVG 2D入门4—笔画与填充
2013/01/30 HTML / CSS
html5 canvas绘制矩形和圆形的实例代码
2016/06/16 HTML / CSS
老板电器官方购物商城:老板油烟机、燃气灶、消毒柜、电烤箱
2018/05/30 全球购物
比较一下entity bean和session bean
2013/12/27 面试题
公开服务承诺制度
2014/03/26 职场文书
文明生主要事迹
2014/05/25 职场文书
学生党员公开承诺书
2014/05/28 职场文书
群众路线教育实践活动思想汇报(2014特荐篇)
2014/09/16 职场文书
优秀团支部申报材料
2014/12/26 职场文书
幼师中班个人总结
2015/02/12 职场文书
力克胡哲观后感
2015/06/10 职场文书
PHP实现创建以太坊钱包转账等功能
2021/04/21 PHP
关于Spring配置文件加载方式变化引发的异常详解
2022/01/18 Java/Android
 python中的元类metaclass详情
2022/05/30 Python