实例简介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 相关文章推荐
discuz论坛 用户登录 后台程序代码
Nov 27 PHP
Discuz!下Memcache缓存实现方法
May 28 PHP
PHP按行读取文件时删除换行符的3种方法
May 04 PHP
CodeIgniter实现更改view文件夹路径的方法
Jul 04 PHP
讲解WordPress开发中一些常用的debug技巧
Dec 18 PHP
php获取给定日期相差天数的方法分析
Feb 20 PHP
PHP删除二维数组中相同元素及数组重复值的方法示例
May 05 PHP
PHP实现webshell扫描文件木马的方法
Jul 31 PHP
PHP常用函数之base64图片上传功能详解
Oct 21 PHP
php获取是星期几的的一些常用姿势
Dec 15 PHP
ThinkPHP 5 AJAX跨域请求头设置实现过程解析
Oct 28 PHP
php+laravel 扫码二维码签到功能
May 15 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实现的一个简单json rpc框架实例
2015/03/30 PHP
php递归实现无限分类的方法
2015/07/28 PHP
php获取flash尺寸详细数据的方法
2016/11/12 PHP
删除PHP数组中头部、尾部、任意元素的实现代码
2017/04/10 PHP
yii2多图上传组件的使用教程
2018/05/10 PHP
Laravel框架实现利用中间件进行操作日志记录功能
2018/06/06 PHP
ThinkPHP 3使用OSS的方法
2018/07/19 PHP
表单项的name命名为submit、reset引起的问题
2007/12/22 Javascript
javascript 写类方式之六
2009/07/05 Javascript
页面装载js及性能分析方法介绍
2014/03/21 Javascript
用原生js做个简单的滑动效果的回到顶部
2014/10/15 Javascript
JavaScript中实现sprintf、printf函数
2015/01/27 Javascript
JS数字千分位格式化实现方法总结
2016/12/16 Javascript
JavaScript实现简单的星星评分效果
2017/05/18 Javascript
Angular4项目中添加i18n国际化插件ngx-translate的步骤详解
2017/07/02 Javascript
微信小程序之电影影评小程序制作代码
2017/08/03 Javascript
AngularJS中filter的使用实例详解
2017/08/25 Javascript
JavaScript 中使用 Generator的方法
2017/12/29 Javascript
cnpm加速Angular项目创建的方法
2018/09/07 Javascript
vue-rx的初步使用教程
2018/09/21 Javascript
vue移动端的左右滑动事件详解
2020/06/17 Javascript
介绍Python的Django框架中的QuerySets
2015/04/20 Python
python超简单解决约瑟夫环问题
2015/05/12 Python
Python模拟登陆淘宝并统计淘宝消费情况的代码实例分享
2016/07/04 Python
Python错误处理操作示例
2018/07/18 Python
python3.6数独问题的解决
2019/01/21 Python
python使用selenium登录QQ邮箱(附带滑动解锁)
2019/01/23 Python
Flask缓存静态文件的具体方法
2020/08/02 Python
python3处理word文档实例分析
2020/12/01 Python
使用CSS3制作倾斜导航条和毛玻璃效果
2017/09/12 HTML / CSS
澳大利亚窗帘商店:Curtain Wonderland
2019/12/01 全球购物
毕业生自荐信格式
2014/03/07 职场文书
小学网上祭英烈活动总结
2014/07/05 职场文书
找工作求职信
2014/07/07 职场文书
篮球赛新闻稿
2015/07/17 职场文书
Python识别花卉种类鉴定网络热门植物并自动整理分类
2022/04/08 Python