实例简介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设计模式 Adapter(适配器模式)
Jun 26 PHP
PHP Parse Error: syntax error, unexpected $end 错误的解决办法
Jun 05 PHP
比较简单的百度网盘文件直链PHP代码
Mar 24 PHP
PHP自动重命名文件实现方法
Nov 04 PHP
PHP动态规划解决0-1背包问题实例分析
Mar 23 PHP
php实现的验证码文件类实例
Jun 18 PHP
PHP随手笔记整理之PHP脚本和JAVA连接mysql数据库
Nov 25 PHP
PHP Filter过滤器全面解析
Aug 09 PHP
PHP与SQL语句常用大全
Dec 10 PHP
PHP Laravel 上传图片、文件等类封装
Aug 16 PHP
PHP levenshtein()函数用法讲解
Mar 08 PHP
php解析非标准json、非规范json的方式实例
Dec 10 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 rawurlencode与urlencode函数的深入分析
2013/06/08 PHP
php jq jquery getJSON跨域提交数据完整版
2013/09/13 PHP
基于preg_match_all采集后数据处理的一点心得笔记(编码转换和正则匹配)
2014/01/31 PHP
简单的自定义php模板引擎
2016/08/26 PHP
PHP PDOStatement::errorInfo讲解
2019/01/31 PHP
jQuery下扩展插件和拓展函数的写法(匿名函数使用的典型例子)
2010/10/20 Javascript
js向上无缝滚动,网站公告效果 具体代码
2013/11/18 Javascript
jQuery.extend()、jQuery.fn.extend()扩展方法示例详解
2014/05/08 Javascript
Jquery实现仿腾讯娱乐频道焦点图(幻灯片)特效
2015/03/06 Javascript
JS+CSS实现精美的二级导航效果代码
2015/09/17 Javascript
require.js的用法详解
2015/10/20 Javascript
jQuery 自定义下拉框(DropDown)附源码下载
2016/07/22 Javascript
AngularJs bootstrap搭载前台框架——基础页面
2016/09/01 Javascript
Javascript typeof与instanceof的区别
2016/10/18 Javascript
jQuery获取选中单选按钮radio的值
2016/12/27 Javascript
JavaScript中 this 指向问题深度解析
2017/02/21 Javascript
微信小程序MUI导航栏透明渐变功能示例(通过改变opacity实现)
2019/01/24 Javascript
关于AOP在JS中的实现与应用详解
2019/05/06 Javascript
微信JSSDK实现打开摄像头拍照再将相片保存到服务器
2019/11/15 Javascript
如何将python中的List转化成dictionary
2016/08/15 Python
Python超越函数积分运算以及绘图实现代码
2019/11/20 Python
Python关于反射的实例代码分享
2020/02/20 Python
Python 面向对象静态方法、类方法、属性方法知识点小结
2020/03/09 Python
python 数据分析实现长宽格式的转换
2020/05/18 Python
如何在Windows中安装多个python解释器
2020/06/16 Python
tensorflow使用CNN分析mnist手写体数字数据集
2020/06/17 Python
浅析python 字典嵌套
2020/09/29 Python
Pycharm创建文件时自动生成文件头注释(自定义设置作者日期)
2020/11/24 Python
就业推荐表自我鉴定
2013/10/29 职场文书
环境工程专业个人求职信
2013/12/05 职场文书
股份转让协议书
2014/04/12 职场文书
技术负责人岗位职责
2015/02/10 职场文书
世界上超棒的8种逻辑思维
2019/08/06 职场文书
Python list列表删除元素的4种方法
2021/11/01 Python
B站评分公认最好看的动漫,你的名字评分9.9,第六备受喜欢
2022/03/18 日漫
详解NumPy中的线性关系与数据修剪压缩
2022/05/25 Python