实例简介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&amp;java(一)
Oct 09 PHP
什么是MVC,好东西啊
May 03 PHP
php 生成静态页面的办法与实现代码详细版
Feb 15 PHP
phpstrom使用xdebug配置方法
Dec 17 PHP
php解压文件代码实现php在线解压
Feb 13 PHP
php cookie名使用点号(句号)会被转换
Oct 23 PHP
非常实用的PHP常用函数汇总
Dec 17 PHP
php实现发送微信模板消息的方法
Mar 07 PHP
PHP线程的内存回收问题
Jul 08 PHP
PHP日志LOG类定义与用法示例
Sep 06 PHP
PHP数组访问常用方法解析
Sep 05 PHP
php 文件上传至OSS及删除远程阿里云OSS文件
Jul 04 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实现ODBC数据分页显示一例
2006/10/09 PHP
php array_keys 返回数组的键名
2016/10/25 PHP
php实现自定义中奖项数和概率的抽奖函数示例
2017/05/26 PHP
解决在laravel中auth建立时候遇到的问题
2019/10/15 PHP
利用毫秒减值计算时长的js代码
2013/09/22 Javascript
jquery实现页面虚拟键盘特效
2015/08/08 Javascript
详解javascript new的运行机制
2016/01/26 Javascript
微信小程序 欢迎界面开发的实例详解
2016/11/30 Javascript
jQuery图片切换动画效果
2017/02/28 Javascript
NodeJS仿WebApi路由示例
2017/02/28 NodeJs
angularjs2中父子组件的数据传递的实例代码
2017/07/05 Javascript
layer子层给父层页面元素赋值,以达到向父层页面传值的效果实例
2017/09/22 Javascript
微信小程序支付前端源码
2018/08/29 Javascript
Node快速切换版本、版本回退(降级)、版本更新(升级)
2021/01/07 Javascript
[36:54]Mineski vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
基于Python实现迪杰斯特拉和弗洛伊德算法
2020/05/27 Python
Python 实现Serial 与STM32J进行串口通讯
2019/12/18 Python
Python中包的用法及安装
2020/02/11 Python
python3 使用openpyxl将mysql数据写入xlsx的操作
2020/05/15 Python
利用python爬取有道词典的方法
2020/12/08 Python
python爬虫爬取某网站视频的示例代码
2021/02/20 Python
一款简洁的纯css3代码实现的动画导航
2014/10/31 HTML / CSS
详解Sticky Footer 绝对底部的两种套路
2017/11/03 HTML / CSS
德国购买健身器材:AsVIVA
2017/08/09 全球购物
全球第二大家装零售商:Lowe’s
2018/01/13 全球购物
生日寿宴答谢词
2014/01/19 职场文书
优质服务口号
2014/06/11 职场文书
乡镇党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
销售辞职信范文
2015/03/02 职场文书
小学德育工作总结2015
2015/05/12 职场文书
教师调动申请报告
2015/05/18 职场文书
家庭教育培训学习心得体会
2016/01/14 职场文书
检讨书格式
2019/04/25 职场文书
2019秋季运动会口号
2019/06/25 职场文书
Python OpenCV超详细讲解读取图像视频和网络摄像头
2022/04/02 Python
Win11查看设备管理器
2022/04/19 数码科技