实例简介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 相关文章推荐
一个oracle+PHP的查询的例子
Oct 09 PHP
PHP-CGI进程CPU 100% 与 file_get_contents 函数的关系分析
Aug 15 PHP
php 检查电子邮件函数(自写)
Jan 16 PHP
php实现的CSS更新类实例
Sep 22 PHP
ecshop实现smtp发送邮件
Feb 03 PHP
thinkPHP模型初始化实例分析
Dec 03 PHP
浅析Laravel5中队列的配置及使用
Aug 04 PHP
windows7配置Nginx+php+mysql的详细教程
Sep 04 PHP
PHP7常量数组用法分析
Sep 26 PHP
Zend Framework分发器用法示例
Dec 11 PHP
浅谈ThinkPHP5.0版本和ThinkPHP3.2版本的区别
Jun 17 PHP
PHP实现创建一个RPC服务操作示例
Feb 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
PHP数组传递是值传递而非引用传递概念纠正
2013/01/31 PHP
主流PHP框架的优缺点对比分析
2014/12/25 PHP
动态创建样式表在各浏览器中的差异测试代码
2011/09/13 Javascript
分享一个自己写的table表格排序js插件(高效简洁)
2011/10/29 Javascript
用Javascript评估用户输入密码的强度(Knockout版)
2011/11/30 Javascript
完美兼容各大浏览器的jQuery插件实现图片切换特效
2014/12/12 Javascript
JavaScript中标识符提升问题
2015/06/11 Javascript
jquery实现滑动特效代码
2015/08/10 Javascript
jquery实现下拉框功能效果【实例代码】
2016/05/06 Javascript
javaScript 事件绑定、事件冒泡、事件捕获和事件执行顺序整理总结
2016/10/10 Javascript
vuejs如何配置less
2017/04/25 Javascript
requireJS模块化实现返回顶部功能的方法详解
2017/10/16 Javascript
简单了解Javscript中兄弟ifream的方法调用
2019/06/17 Javascript
vue中destroyed方法的使用说明
2020/07/21 Javascript
Python的Tornado框架实现图片上传及图片大小修改功能
2016/06/30 Python
python实现神经网络感知器算法
2017/12/20 Python
python实现微信跳一跳辅助工具步骤详解
2018/01/04 Python
CentOS 7下安装Python3.6 及遇到的问题小结
2018/11/08 Python
python @propert装饰器使用方法原理解析
2019/12/25 Python
利用Python代码实现一键抠背景功能
2019/12/29 Python
Pycharm编辑器功能之代码折叠效果的实现代码
2020/10/15 Python
python 获取计算机的网卡信息
2021/02/18 Python
突袭HTML5之Javascript API扩展1—Web Worker异步执行及相关概述
2013/01/31 HTML / CSS
新西兰优惠网站:Treat Me
2019/07/04 全球购物
Engel & Bengel官网:婴儿推车、儿童房家具和婴儿设备
2019/12/28 全球购物
《学会待客》教学反思
2014/02/22 职场文书
2014年公司庆元旦活动方案
2014/03/05 职场文书
委托公证书
2014/04/08 职场文书
研究生求职自荐书
2014/06/23 职场文书
机关驾驶员违规检讨书
2014/09/13 职场文书
离婚协议书范文
2015/01/26 职场文书
给校长的建议书作文500字
2015/09/14 职场文书
《风不能把阳光打败》读后感3篇
2020/01/06 职场文书
如何用 Python 子进程关闭 Excel 自动化中的弹窗
2021/05/07 Python
基于angular实现树形二级表格
2021/10/16 Javascript
关于PHP数组迭代器的使用方法实例
2021/11/17 PHP