第十一节 重载 [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 相关文章推荐
新版PHP将向Java靠拢
Oct 09 PHP
php代码书写习惯优化小结
Jun 20 PHP
基于PHP服务端图片生成缩略图的方法详解
Jun 20 PHP
php+highchats生成动态统计图
May 21 PHP
ThinkPHP中RBAC类的四种用法分析
Nov 24 PHP
分享五个PHP7性能优化提升技巧
Dec 07 PHP
PHP文件上传之多文件上传的实现思路
Jan 27 PHP
深入分析PHP优化及注意事项
Jul 04 PHP
Yii2框架中日志的使用方法分析
May 22 PHP
PHP检测接口Traversable用法详解
Dec 29 PHP
PHP操作MongoDB实现增删改查功能【附php7操作MongoDB方法】
Apr 24 PHP
swoole锁的机制代码实例讲解
Mar 04 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
PHP验证码类代码( 最新修改,完全定制化! )
2010/12/02 PHP
windows下的WAMP环境搭建图文教程(推荐)
2017/07/27 PHP
PHP回调函数与匿名函数实例详解
2017/08/16 PHP
网页的标准,IMG不支持onload标签怎么办
2006/06/29 Javascript
关于文本限制字数的js代码
2007/04/02 Javascript
使用简洁的jQuery方法实现隔行换色功能
2014/01/02 Javascript
jquery的ajax跨域请求原理和示例
2014/05/08 Javascript
BOOTSTRAP时间控件显示在模态框下面的bug修复
2015/02/05 Javascript
设计模式中的组合模式在JavaScript程序构建中的使用
2016/05/18 Javascript
终于实现了!精彩的jquery弹幕效果
2016/07/18 Javascript
js删除数组元素、清空数组的简单方法(必看)
2016/07/27 Javascript
jQuery焦点图轮播效果实现方法
2016/12/19 Javascript
vue.js 获取当前自定义属性值
2017/06/01 Javascript
详解vue2.0的Element UI的表格table列时间戳格式化
2017/06/13 Javascript
vue基于element的区间选择组件
2018/09/07 Javascript
JavaScript惰性载入函数实例分析
2019/03/27 Javascript
vue.js自定义组件实现v-model双向数据绑定的示例代码
2020/01/08 Javascript
vue使用map代替Aarry数组循环遍历的方法
2020/04/30 Javascript
从表单校验看JavaScript策略模式的使用详解
2020/10/17 Javascript
python发送邮件示例(支持中文邮件标题)
2014/02/16 Python
Python3控制路由器——使用requests重启极路由.py
2016/05/11 Python
深入解析Python中的上下文管理器
2016/06/28 Python
python数据结构链表之单向链表(实例讲解)
2017/07/25 Python
python中利用Future对象异步返回结果示例代码
2017/09/07 Python
python批量图片处理简单示例
2019/08/06 Python
详解Python 中sys.stdin.readline()的用法
2019/09/12 Python
python 爬虫 实现增量去重和定时爬取实例
2020/02/28 Python
python实现将列表中各个值快速赋值给多个变量
2020/04/02 Python
python3.9.1环境安装的方法(图文)
2021/02/02 Python
matplotlib bar()实现百分比堆积柱状图
2021/02/24 Python
英国折扣零售连锁店:QD Stores
2018/12/08 全球购物
政法大学毕业生自荐信范文
2014/01/01 职场文书
《理想》教学反思
2014/02/17 职场文书
农业局学习党的群众路线教育实践活动心得体会
2014/03/07 职场文书
交通事故协议书范文
2014/04/16 职场文书
2015年社区妇联工作总结
2015/04/21 职场文书