实例简介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+oracle 分页类
Oct 09 PHP
PHP实现MySQL更新记录的代码
Jun 07 PHP
写出高质量的PHP程序
Feb 04 PHP
PHP 转义使用详解
Jul 15 PHP
php实现快速排序的三种方法分享
Mar 12 PHP
php使用Imagick生成图片的方法
Jul 31 PHP
Smarty分页实现方法完整实例
May 11 PHP
php版微信公众账号第三方管理工具开发简明教程
Sep 23 PHP
PHP 表单提交及处理表单数据详解及实例
Dec 27 PHP
PHP实现求两个字符串最长公共子串的方法示例
Nov 17 PHP
PHP PDOStatement::setAttribute讲解
Feb 01 PHP
php使用curl模拟多线程实现批处理功能示例
Jul 25 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+javascript液晶时钟
2006/10/09 PHP
PHP 检查扩展库或函数是否可用的代码
2010/04/06 PHP
洪恩在线成语词典小偷程序php版
2012/04/20 PHP
php获取数组长度的方法(有实例)
2013/10/27 PHP
PHP+MYSQL实现用户的增删改查
2015/03/24 PHP
ThinkPHP框架安全实现分析
2016/03/14 PHP
accesskey 提交
2006/06/26 Javascript
短信提示使用 特效
2007/01/19 Javascript
js 调用本地exe的例子(支持IE内核的浏览器)
2012/12/26 Javascript
form表单中去掉默认的enter键提交并绑定js方法实现代码
2013/04/01 Javascript
使用jquery组件qrcode生成二维码及应用指南
2015/02/22 Javascript
利用jQuery和CSS将背景图片拉伸
2015/10/16 Javascript
使用jQuery的easydrag插件实现可拖动的DIV弹出框
2016/02/19 Javascript
javascript高级选择器querySelector和querySelectorAll全面解析
2016/04/07 Javascript
jQuery Ajax 实例代码 ($.ajax、$.post、$.get)
2016/04/29 Javascript
Jquery和BigFileUpload实现大文件上传及进度条显示
2016/06/27 Javascript
微信小程序 参数传递实例代码
2017/03/20 Javascript
Javascript中从学习bind到实现bind的过程
2018/01/05 Javascript
微信小程序实现留言板
2018/10/31 Javascript
用Python编写一个简单的FUSE文件系统的教程
2015/04/02 Python
Python使用gensim计算文档相似性
2016/04/10 Python
python遍历文件夹找出文件夹后缀为py的文件方法
2018/10/21 Python
python实现一组典型数据格式转换
2018/12/15 Python
Python图像处理实现两幅图像合成一幅图像的方法【测试可用】
2019/01/04 Python
使用python切片实现二维数组复制示例
2019/11/26 Python
Keras 中Leaky ReLU等高级激活函数的用法
2020/07/05 Python
高中生期末评语
2014/01/28 职场文书
机关道德讲堂实施方案
2014/03/15 职场文书
2014党员学习兰辉先进事迹思想汇报
2014/09/17 职场文书
优秀党员事迹材料
2014/12/18 职场文书
英语辞职信怎么写
2015/02/28 职场文书
2015年中秋寄语
2015/07/31 职场文书
观看禁毒宣传片后的感想
2015/08/11 职场文书
MySQL8.0.24版本Release Note的一些改进点
2021/04/22 MySQL
pytorch--之halfTensor的使用详解
2021/05/24 Python
Vue3.0写自定义指令的简单步骤记录
2021/06/27 Vue.js