第十一节 重载 [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 相关文章推荐
PHP4实际应用经验篇(1)
Oct 09 PHP
shopex中集成的站长统计功能的代码简单分析
Aug 11 PHP
zend Framework中的Layout(模块化得布局)详解
Jun 28 PHP
php获取数组长度的方法(有实例)
Oct 27 PHP
PHP实现根据设备类型自动跳转相应页面的方法
Jul 24 PHP
解决php表单重复提交实现方法
Sep 29 PHP
php中注册器模式类用法实例分析
Nov 03 PHP
ThinkPHP5实现作业管理系统中处理学生未交作业与已交作业信息的方法
Nov 12 PHP
PHP格式化显示时间date()函数代码
Oct 03 PHP
PHP里的$_GET数组介绍
Mar 22 PHP
laravel 获取当前url的别名方法
Oct 11 PHP
PHP设计模式(九)外观模式Facade实例详解【结构型】
May 02 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 错误处理经验分享
2011/10/11 PHP
thinkphp5.0整合phpsocketio完整攻略(绕坑)
2018/10/12 PHP
通过修改referer下载文件的方法
2008/05/11 Javascript
jquery 插件开发方法小结
2009/10/23 Javascript
js实现日期级联效果
2014/01/23 Javascript
jquery实现的随机多彩tag标签随机颜色和字号大小效果
2014/03/27 Javascript
兼容主流浏览器的jQuery+CSS 实现遮罩层的简单代码
2014/10/14 Javascript
Javascript中数组sort和reverse用法分析
2014/12/30 Javascript
网页挂马方式整理及详细介绍
2016/11/03 Javascript
详解vue.js组件化开发实践
2016/12/14 Javascript
nodeJs链接Mysql做增删改查的简单操作
2017/02/04 NodeJs
关于vue-router的beforeEach无限循环的问题解决
2017/09/09 Javascript
react router 4.0以上的路由应用详解
2017/09/21 Javascript
vue template中slot-scope/scope的使用方法
2018/09/06 Javascript
详解使用React.memo()来优化函数组件的性能
2019/03/19 Javascript
详解原生JS动态添加和删除类
2019/03/26 Javascript
javascript中undefined的本质解析
2019/07/31 Javascript
vue-列表下详情的展开与折叠案例
2020/07/28 Javascript
[58:18]2018DOTA2亚洲邀请赛3月29日 小组赛B组 iG VS Mineski
2018/03/30 DOTA
django从请求到响应的过程深入讲解
2018/08/01 Python
python使用循环打印所有三位数水仙花数的实例
2018/11/13 Python
如何用Python来理一理红楼梦里的那些关系
2019/08/14 Python
详解如何在cmd命令窗口中搭建简单的python开发环境
2019/08/29 Python
python实现获取单向链表倒数第k个结点的值示例
2019/10/24 Python
python实现随机加减法生成器
2020/02/24 Python
使用Python+selenium实现第一个自动化测试脚本
2020/03/17 Python
Pandas DataFrame求差集的示例代码
2020/12/13 Python
Python datetime模块的使用示例
2021/02/02 Python
在HTML5中使用MathML数学公式的简单讲解
2016/02/19 HTML / CSS
Booking.com亚太地区:Booking.com APAC
2020/02/07 全球购物
关于抽烟的检讨书
2014/02/25 职场文书
国际金融专业自荐信
2014/07/05 职场文书
关于保护环境的建议书
2014/08/26 职场文书
小学庆六一活动总结
2014/08/28 职场文书
总经理聘用协议书
2015/09/21 职场文书
nginx 防盗链防爬虫配置详解
2021/03/31 Servers