第十九章 面向对象的工具

学习要点:
1.OOP
的魔术方法
2.类函数和对象函数
3.OOP 的反射API

PHP通过类和方法等语言结构支持面向对象编程。同时也通过对象相关的函数和
内置类为面向对象提供广泛支持。

一.OOP的魔术方法

PHP引入了__autoload()内置方法来自动包含类文件。__autoload()应该被写成单个参
数的方法。当PHP引擎遇到试图实例化未知类的操作时,会调用__autoload()方法,并将类
名当作字符串参数传递给它。

function __autoload($_className) {
require $_className . ‘.class.php‘;
}
$demo = new Computer ();

PHP采用了__call()内置方法来屏蔽对象调用方法时产生的错误。当对象调用一个不存
在的方法时,会自动调用__call()方法。

private function __call($_methodName,$args) {
echo $_methodName.‘方法不存在‘;
print_r($args);
}
$computer->go(‘我‘,1,‘知道‘);

PHP使用__toString()内置方法来打印对象的引用。没有使用__toString()的对象是产生
一个错误,当打印对象的时候会自动调用__toString()方法。

class Computer {
private function __toString() {
return ‘打印对象‘;
}
}
echo new Computer ();

PHP可以在类中定义一个__clone()内置方法来调整对象的克隆行为。当一个对象被克
隆的时候自动执行__clone()方法,而复制的对象可以在其方法体内进行调整。


class Computer {
public $_name;
public function __clone() {
$this->_name = ‘ibm‘;
}
}
$computer1 = new Computer ();
$computer1->_name = ‘dell‘;
$computer2 = clone $computer1;
echo $computer2->_name;

二.类函数和对象函数

PHP提供了一系列强大的函数来检测类和对象。以便在第三方系统,运行时知道正在
使用的是哪个。

1.class_exists()函数接受表示类的字符串,检查并返回布尔值。如果类存在,返回true,
否则返回false。

echo class_exists(‘Computer‘);

2.get_class()函数获取对象的类名,如果不是对象,则返回false。

echo get_class($computer);

3.get_class_methods()函数获取类中的方法(公共的),以数组的形式返回出来。

print_r(get_class_methods($computer));

4.get_class_vars()函数获取类中的字段(公共的),以数组的形式返回出来

print_r(get_class_vars(‘Computer‘));

5.get_parent_class()函数获取子类的父类,如果没有返回false。

echo get_parent_class(‘NoteComputer‘);

6.interface_exists()函数确定接口是否存在,如果存在返回true,否则返回false。

echo interface_exists(‘Computer‘);

7.is_a()函数确定对象是否是类或者是否是这类的父类时,返回ture,否则返回false。

echo is_a($computer,‘Computer‘);

8.is_subclass_of()函数确定对象是否是类的子类,是返回ture,否则返回false。

echo is_subclass_of($notecomputer,‘Computer‘);

9.method_exists()函数确定对象的方法是否存在,是返回ture,否则返回false。

echo method_exists($computer,‘_run‘);

三.OOP的反射API

PHP5的类和对象函数并没有告诉我们类内部的所有一切,而只是报告了它们的公共成
员。要充分了解一个类,需要知道其私有成员和保护成员,还要知道其方法所期望的参数。
对此,使用反射API。

1.获得反射API的转储信息

$rc = new ReflectionClass(‘Computer‘);
Reflection::export($rc);

2.获得PHP内置的类库的信息

Reflection::export(new ReflectionClass(‘Reflection‘));

3.获取类里的某个元素

$_rc = new ReflectionClass(‘Computer‘);
echo $_rc->getFileName();
echo $_rc->getName();

注:文章出自李炎恢PHP视频教程,本文仅限交流使用,不得用于商业用途,否则后果自负。

第十九章 面向对象的工具,布布扣,bubuko.com

时间: 2024-10-10 15:43:13

第十九章 面向对象的工具的相关文章

Gradle 1.12翻译——第十九章. Gradle 守护进程

有关其他已翻译的章节请关注Github上的项目:https://github.com/msdx/gradledoc/tree/1.12,或访问:http://gradledoc.qiniudn.com/1.12/userguide/userguide.html 本文原创,转载请注明出处:http://blog.csdn.net/maosidiaoxian/article/details/41343615 关于我对Gradle的翻译,以Github上的项目及http://gradledoc.qin

第十九章 文本处理流编辑器:awk编程

第十九章 文本处理流编辑器:awk编程 名词解释 awk 是一种编程语言,用于linux/unix下对文本和数据进行处理.数据可以来自标准输入(stdin).一个或多个文件.或其它命令的输出.它支持用户自定义函数和动态正则表达式等先进功能,是linux/unix下的一个强大个编程工具.它在命令行中使用,但更多是作为脚本来使用.awk有很多内建的功能,比如:数组.函数等,这是它和C语言的相同之处,灵活性是awk最大的优势. awk命令格式和选项 语法形式 awk [option] 'script'

第四十九章

第四十九章1 圣人无心,将心比心 圣人恒无心,以百姓之心为心. 优秀的领导者自己的心是空的,把老百姓的心作为自己的心. 领导者要换位思考,想老板姓所想.要学会将心比心. 各位朋友大家好,今天我们接着来聊<道德经>. 不知道各位双十一过得怎么样?大家都买了很多东西吧?双十一那天我开玩笑,我发一个微博,我还在自己朋友圈里发了个微信,在我朋友圈说,双十一大酬宾了,我讲的<道德经>200多期,全部今天免费.我是搞笑,结果真有的网友留言,真的吗?太好了,我一看我晕了,我说我是开玩笑,他真的一

第十九章

绝圣弃智,民利百倍:绝化弃虑,民复孝慈:绝巧弃利,盗贼无有.此三言也,以为文未足,故令有所属:见素保朴,少私而寡欲,绝学无忧. 绝圣弃智,民利百倍: 其实所谓“绝圣弃智”讲的是管理者,管理者“绝圣弃智”,老百姓就能够“民利百倍”,老百姓的收益就会很大,老百姓就会幸福很多.这“民利百倍”的意思就是说老百姓的利益就会多很多,多出百倍来.要求管理者尽量放弃追求这种虚华的名誉,因为没有必要,您做到就行了,但是不要把这些东西放到口头上,领导者一旦追求这些虚幻的名誉就坏了.比如好大喜功,对外说自己是圣人 绝

攻城狮在路上(叁)Linux(二十九)--- 完整备份工具:dump以及restore

一.dump命令: 该命令既可以针对整个文件系统进行备份,也可以仅针对目录来备份.还可以指定不同的备份等级(-0~-9共10个等级). dump -W:列出在/etc/fstab中具有dump设置的分区是否备份过. 命令格式: dump [-Suvj] [-level] [-f 备份文件] 待备份数据 参数说明: -S:仅列出后面的待备份数据所需要的磁盘空间大小. -u:将这次dump的时间记录到/etc/dumpdates文件中. -v:将dump的文件过程显示出来. -j:加入bzip2的支

第十九章 APO连接与网络v节点

                  第十九章   APO连接与网络v节点       在编写网络底层实现前,需要做许多的准备工作:除了修改前面的章节外,可能还需写3章:本章.文件号管理类的实现.本地内存管理类的实现.我很希望最终的网络编程能给我惊喜:IP/TCP/UDP/ICMP的实现.包括所有的网络服务器的实现(HTTP.DNS.FTP等等),能到达300行的代码量:多于300行代码量那就更好了.我会很高兴.网络编程第一层简为socket层,第二层简称为TCP层,第三层简称为IP层:以后,不再

189第一百八十九章 你的命是我的!

第一百八十九章 你的命是我的!   嗖! 露丝骤然弯腰,避开一名男子的腾空膝撞,未等男子落地,另一人已一脚踢中露丝腹. "唔--" 露丝被这股巨大的力量踹得迅速后退.若非她优秀的平衡能力与沉稳的下盘,怕是这一脚便能将她踢飞倒地. "呼--" 露丝手腕一翻,再次紧握***,抹掉嘴角血渍,那双明亮而有神的眸子死死盯着这对配合得天衣缝的男子. 他们很强. 比前面两个铁汉强大太多. 若是单打独斗,露丝有把握将手心的***刺入对方的心脏. 可他们不会给露丝这个机会,他们的配合

Gradle 1.12用户指南翻译——第二十九章. Checkstyle 插件

其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Github上的地址: https://github.com/msdx/gradledoc/tree/1.12. 直接浏览双语版的文档请访问: http://gradledoc.qiniudn.com/1.12/userguide/userguide.html. 另外,Android 手机用户可通过我写的一个程序浏览文档,带缓存功能的,目前

Gradle 1.12用户指南翻译——第三十九章. IDEA 插件

本文由CSDN博客万一博主翻译,其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Github上的地址: https://github.com/msdx/gradledoc 本文翻译所在分支: https://github.com/msdx/gradledoc/tree/1.12. 直接浏览双语版的文档请访问: http://gradledoc.qiniudn.com/1.12/userg