第十一节 重载 [11]


Posted in PHP onOctober 09, 2006

PHP4中已经有了重载的语法来建立对于外部对象模型的映射,就像Java和COM那样. PHP5带来了强大的面向对象重载,允许程序员建立自定义的行为来访问属性和调用方法.

重载可以通过__get, __set, and __call几个特殊方法来进行. 当Zend引擎试图访问一个成员并没有找到时,PHP将会调用这些方法.

在例6.14中,__get和__set代替所有对属性变量数组的访问. 如果必要,你可以实现任何类型你想要的过滤. 例如,脚本可以禁止设置属性值, 在开始时用一定的前缀或包含一定类型的值.

__call方法说明了你如何调用未经定义的方法. 你调用未定义方法时,方法名和方法接收的参数将会传给__call方法, PHP传递__call的值返回给未定义的方法.

Listing 6.14 User-level overloading
<?php
class Overloader
{
private $properties = array();

function __get($property_name)
{
if(isset($this->properties[$property_name]))
{
return($this->properties[$property_name]);
}
else
{
return(NULL);
}
}

function __set($property_name, $value)
{
$this->properties[$property_name] = $value;
}

function __call($function_name, $args)
{
print("Invoking $function_name()<br>n");
print("Arguments: ");
print_r($args);

return(TRUE);
}
}
$o = new Overloader();

//invoke __set() 给一个不存在的属性变量赋值,激活__set()
$o->dynaProp = "Dynamic Content";

//invoke __get() 激活__get()
print($o->dynaProp . "<br>n");

//invoke __call() 激活__call()
$o->dynaMethod("Leon", "Zeev");
?>

PHP 相关文章推荐
文章推荐系统(二)
Oct 09 PHP
PHP脚本的10个技巧(5)
Oct 09 PHP
php网页后退不再出现过期
Mar 08 PHP
不错的PHP学习之php4与php5之间会穿梭一点点感悟
May 03 PHP
用PHP实现图象锐化代码
Jun 14 PHP
QueryPath PHP 中的jQuery
Apr 11 PHP
php模拟socket一次连接,多次发送数据的实现代码
Jul 26 PHP
使用pthreads实现真正的PHP多线程(需PHP5.3以上版本)
May 05 PHP
老版本PHP转义Json里的特殊字符的函数
Jun 08 PHP
PHP实现批量修改文件后缀名的方法
Jul 30 PHP
PHP生成word文档的三种实现方式
Nov 14 PHP
PHP实现redis限制单ip、单用户的访问次数功能示例
Jun 16 PHP
第十二节 类的自动加载 [12]
Oct 09 #PHP
第十四节 命名空间 [14]
Oct 09 #PHP
学习使用PHP数组
Oct 09 #PHP
PHP中创建并处理图象
Oct 09 #PHP
如何正确理解PHP的错误信息
Oct 09 #PHP
php+dbfile开发小型留言本
Oct 09 #PHP
用 php 编写的日历
Oct 09 #PHP
You might like
Uchome1.2 1.5 代码学习 common.php
2009/04/24 PHP
初学PHP的朋友 经常问的一些问题。不断更新
2011/08/11 PHP
php中的strpos使用示例
2014/02/27 PHP
深入浅析php中sprintf与printf函数的用法及区别
2016/01/08 PHP
php将print_r处理后的数据还原为原始数组的解决方法
2016/11/02 PHP
php微信公众平台交互与接口详解
2016/11/28 PHP
PHP面向对象程序设计之对象生成方法详解
2016/12/02 PHP
PHP实现类似于C语言的文件读取及解析功能
2017/09/01 PHP
Laravel修改验证提示信息为中文的示例
2019/10/23 PHP
jquery实现的元素的left增加N像素 鼠标移开会慢慢的移动到原来的位置
2010/03/21 Javascript
利用jQuery接受和处理xml数据的代码(.net)
2011/03/28 Javascript
javascript 弹出的窗口返回值给父窗口具体实现
2013/11/23 Javascript
ECMAScript6新增值比较函数Object.is
2015/06/12 Javascript
使用JavaScript实现旋转的彩圈特效
2015/06/23 Javascript
JavaScript在网页中画圆的函数arc使用方法
2015/11/13 Javascript
JS实现的自定义水平滚动字体插件完整实例
2016/06/17 Javascript
移动开发之自适应手机屏幕宽度
2016/11/23 Javascript
js控制文本框禁止输入特殊字符详解
2017/04/07 Javascript
angularjs中的$eval方法详解
2017/04/24 Javascript
koa大型web项目中使用路由装饰器的方法示例
2019/04/02 Javascript
Python自动扫雷实现方法
2015/07/25 Python
python中的break、continue、exit()、pass全面解析
2017/08/05 Python
使用Python &amp; Flask 实现RESTful Web API的实例
2017/09/19 Python
python中如何正确使用正则表达式的详细模式(Verbose mode expression)
2017/11/08 Python
解读! Python在人工智能中的作用
2017/11/14 Python
[原创]教女朋友学Python3(二)简单的输入输出及内置函数查看
2017/11/30 Python
python 读取文件并把矩阵转成numpy的两种方法
2019/02/12 Python
Django框架使用内置方法实现登录功能详解
2019/06/12 Python
浅谈python已知元素,获取元素索引(numpy,pandas)
2019/11/26 Python
PyCharm设置Ipython交互环境和宏快捷键进行数据分析图文详解
2020/04/23 Python
意大利比基尼品牌:MISS BIKINI
2019/11/02 全球购物
Bloomingdale’s阿联酋:选购奢华时尚、美容及更多
2020/09/22 全球购物
小学生演讲稿
2014/01/12 职场文书
《火烧云》教学反思
2016/02/23 职场文书
maven 解包依赖项中的文件的解决方法
2022/07/15 Java/Android
JS前端使用canvas实现扩展物体类和事件派发
2022/08/05 Javascript