实例简介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 相关文章推荐
模拟OICQ的实现思路和核心程序(一)
Oct 09 PHP
PHP has encountered an Access Violation 错误的解决方法
Jan 17 PHP
PHP无限分类(树形类)的深入分析
Jun 02 PHP
php实现天干地支计算器示例
Mar 14 PHP
php防止sql注入之过滤分页参数实例
Nov 03 PHP
php include类文件超时问题处理
Feb 06 PHP
php实现的SSO单点登录系统接入功能示例分析
Oct 12 PHP
PHP基于IMAP收取邮件的方法示例
Aug 07 PHP
Laravel 5使用Laravel Excel实现Excel/CSV文件导入导出的功能详解
Oct 11 PHP
PHP基于curl post实现发送url及相关中文乱码问题解决方法
Nov 25 PHP
php post json参数的传递和接收处理方法
May 31 PHP
关于PHP5.6+版本“No input file specified”问题的解决
Dec 11 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
汉字转化为拼音(php版)
2006/10/09 PHP
一些php技巧与注意事项分析
2011/02/03 PHP
php fsockopen中多线程问题的解决办法[翻译]
2011/11/09 PHP
php选择排序法实现数组排序实例分析
2015/02/16 PHP
为你总结一些php系统类函数
2015/10/21 PHP
IE和Mozilla的兼容性汇总event
2007/08/12 Javascript
解决jquery submit()提交表单提示:f[s] is not a function
2013/01/23 Javascript
JavaScript自动设置IFrame高度的小例子
2013/06/08 Javascript
一个获取第n个元素节点的js函数
2014/09/02 Javascript
JavaScript字符串对象的concat方法实例(用于连接两个或多个字符串)
2014/10/16 Javascript
在linux中使用包管理器安装node.js
2015/03/13 Javascript
js实现仿Windows风格选项卡和按钮效果实例
2015/05/13 Javascript
jQuery插件开发精品教程(让你的jQuery更上一个台阶)
2015/11/07 Javascript
AngularJS实现表单手动验证和表单自动验证
2015/12/09 Javascript
对javascript继承的理解
2016/10/11 Javascript
Vue.js弹出模态框组件开发的示例代码
2017/07/26 Javascript
详解vue2 $watch要注意的问题
2017/09/08 Javascript
jQuery实现输入框的放大和缩小功能示例
2018/07/21 jQuery
layui中table表头样式修改方法
2018/08/15 Javascript
基于JS实现web端录音与播放功能
2019/04/17 Javascript
详解vue更改头像功能实现
2019/04/28 Javascript
微信小程序图片右边加两行文字的代码
2020/04/23 Javascript
Element-ui树形控件el-tree自定义增删改和局部刷新及懒加载操作
2020/08/31 Javascript
[16:27]DOTA2 HEROS教学视频教你分分钟做大人-艾欧
2014/06/11 DOTA
Python获取Windows或Linux主机名称通用函数分享
2014/11/22 Python
python用模块zlib压缩与解压字符串和文件的方法
2016/12/16 Python
Python闭包的两个注意事项(推荐)
2017/03/20 Python
opencv 获取rtsp流媒体视频的实现方法
2019/08/23 Python
wxPython色环电阻计算器
2019/11/18 Python
Python 之 Json序列化嵌套类方式
2020/02/27 Python
pycharm使用技巧之自动调整代码格式总结
2020/11/04 Python
python3列表删除大量重复元素remove()方法的问题详解
2021/01/04 Python
护士自我评价范文
2014/01/25 职场文书
项目委托协议书(最新)
2014/09/13 职场文书
运动会通讯稿600字
2015/07/20 职场文书
2015年学校教研室主任工作总结
2015/07/20 职场文书