实例简介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 相关文章推荐
Win2003下APACHE+PHP5+MYSQL4+PHPMYADMIN 的简易安装配置
Nov 18 PHP
在数据量大(超过10万)的情况下
Jan 15 PHP
PHP集成FCK的函数代码
Sep 27 PHP
PHP中限制IP段访问、禁止IP提交表单的代码
Apr 23 PHP
PHP中nowdoc和heredoc使用需要注意的一点
Mar 21 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(三)
Jun 23 PHP
php中mkdir函数用法实例分析
Nov 15 PHP
PHP的cURL库简介及使用示例
Feb 06 PHP
PHP Web木马扫描器代码分享
Sep 06 PHP
Thinkphp和onethink实现微信支付插件
Apr 13 PHP
PHP7匿名类用法分析
Sep 26 PHP
Laravel配置全局公共函数的方法步骤
May 09 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 网页播放器用来播放在线视频的代码(自动判断并选择视频文件类型)
2010/06/03 PHP
简单实用的网站PHP缓存类实例
2014/07/18 PHP
php定时执行任务设置详解
2015/02/06 PHP
PHP下载生成的csv文件及问题总结
2015/08/06 PHP
js prototype 格式化数字 By shawl.qiu
2007/04/02 Javascript
javascript innerHTML、outerHTML、innerText、outerText的区别
2008/11/24 Javascript
基于jQuery的实现简单的分页控件
2010/10/10 Javascript
AJAX 网页保留浏览器前进后退等功能
2011/02/12 Javascript
分享一个自己动手写的jQuery分页插件
2014/08/28 Javascript
浅谈JavaScript正则表达式分组匹配
2015/04/10 Javascript
js实现input框文字动态变换显示效果
2015/08/19 Javascript
javascript滚轮控制模拟滚动条
2016/10/19 Javascript
详解React中合并单元格的正确写法
2019/01/08 Javascript
JavaScript中Dom操作实例详解
2019/07/08 Javascript
EasyUI 数据表格datagrid列自适应内容宽度的实现
2019/07/18 Javascript
Vue3 的响应式和以前有什么区别,Proxy 无敌?
2020/05/20 Javascript
Nodejs 数组的队列以及forEach的应用详解
2021/02/25 NodeJs
python打开url并按指定块读取网页内容的方法
2015/04/29 Python
Python实现二分查找与bisect模块详解
2017/01/13 Python
python中字符串比较使用is、==和cmp()总结
2018/03/18 Python
Jupyter notebook远程访问服务器的方法
2018/05/24 Python
Flask框架学习笔记之模板操作实例详解
2019/08/15 Python
Python绘制热力图示例
2019/09/27 Python
Pytorch十九种损失函数的使用详解
2020/04/29 Python
Python实现aes加密解密多种方法解析
2020/05/15 Python
Python模拟键盘输入自动登录TGP
2020/11/27 Python
智能室内花园:Click & Grow
2021/01/29 全球购物
劳资人员岗位职责
2013/12/19 职场文书
校运会入场式解说词
2014/02/10 职场文书
房屋过户委托书范本
2014/10/07 职场文书
校园新闻广播稿5篇
2014/10/10 职场文书
故意伤害辩护词
2015/05/21 职场文书
小学音乐课歌曲《堆雪人》教学反思
2016/02/18 职场文书
python glom模块的使用简介
2021/04/13 Python
Spring事务管理下synchronized锁失效问题的解决方法
2022/03/31 Java/Android
详解Go语言中Get/Post请求测试
2022/06/01 Golang