实例简介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制作静态网站的模板框架(三)
Oct 09 PHP
PHP 5.0对象模型深度探索之属性和方法
Mar 27 PHP
phpMyAdmin2.11.6安装配置方法
Aug 24 PHP
程序员编程十条戒律
Jul 09 PHP
献给php初学者(入门学习经验谈)
Oct 12 PHP
二进制交叉权限微型php类分享
Feb 07 PHP
yii2中dropDownList实现二级和三级联动写法
Apr 26 PHP
PHP实现微信图片上传到服务器的方法示例
Jun 29 PHP
如何修改Laravel中url()函数生成URL的根地址
Aug 11 PHP
在php的yii2框架中整合hbase库的方法
Sep 20 PHP
Yii框架分页技术实例分析
Aug 30 PHP
php设计模式之中介者模式分析【星际争霸游戏案例】
Mar 23 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
wordpress之wp-settings.php
2007/08/17 PHP
深入理解PHP之require/include顺序 推荐
2011/01/02 PHP
PHP表单数据写入MySQL数据库的代码
2016/05/31 PHP
thinkphp3.2.3版本的数据库增删改查实现代码
2016/09/22 PHP
Laravel框架数据库迁移操作实例详解
2020/04/06 PHP
jquery实现删除一个元素后面的所有元素功能
2015/12/21 Javascript
浅谈Sticky组件的改进实现
2016/03/22 Javascript
Js 获取当前函数参数对象的实现代码
2016/06/20 Javascript
浅谈JavaScript 数据属性和访问器属性
2016/09/01 Javascript
微信小程序 数据封装,参数传值等经验分享
2017/01/09 Javascript
Node.js微信 access_token ( jsapi_ticket ) 存取与刷新的示例
2017/09/30 Javascript
基于百度地图api清除指定覆盖物(Overlay)的方法
2018/01/26 Javascript
vue.js表单验证插件(vee-validate)的使用教程详解
2019/05/23 Javascript
jquery多级树形下拉菜单的实例代码
2019/07/09 jQuery
基于JS抓取某高校附近共享单车位置 使用web方式展示位置变化代码实例
2019/08/27 Javascript
微信小程序 select 下拉框组件功能
2019/09/09 Javascript
python插入排序算法的实现代码
2013/11/21 Python
使用Python来编写HTTP服务器的超级指南
2016/02/18 Python
Python 加密的实例详解
2017/10/09 Python
Python进阶学习之特殊方法实例详析
2017/12/01 Python
python 实现将字典dict、列表list中的中文正常显示方法
2018/07/06 Python
python得到qq句柄,并显示在前台的方法
2018/10/14 Python
python 判断参数为Nonetype类型或空的实例
2018/10/30 Python
Python数据预处理之数据规范化(归一化)示例
2019/01/08 Python
Python中三元表达式的几种写法介绍
2019/03/04 Python
用Python识别人脸,人种等各种信息
2019/07/15 Python
Python3.7.0 Shell添加清屏快捷键的实现示例
2020/03/23 Python
Django框架安装及项目创建过程解析
2020/09/14 Python
python matplotlib工具栏源码探析三之添加、删除自定义工具项的案例详解
2021/02/25 Python
详解CSS3中的box-sizing(content-box与border-box)
2019/04/19 HTML / CSS
Banana Republic英国官网:香蕉共和国,GAP集团旗下偏贵族风
2018/04/24 全球购物
英国健身仓库:Bodybuilding Warehouse
2019/03/06 全球购物
NET程序员上机面试题
2015/05/23 面试题
创业项目大全(适合在家创业的项目)
2019/08/15 职场文书
Docker下安装Oracle19c
2022/04/13 Servers
CSS中理解层叠性及权重如何分配
2022/12/24 HTML / CSS