第十一节 重载 [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中的一个中文字符串截取函数
Feb 14 PHP
mysql+php分页类(已测)
Mar 31 PHP
基于Windows下Apache PHP5.3.1安装教程
Jan 08 PHP
IIS下PHP连接数据库提示mysql undefined function mysql_connect()
Jun 04 PHP
php简单实现MVC
Feb 05 PHP
CentOS安装php v8js教程
Feb 26 PHP
PHP多文件上传实例
Jul 09 PHP
PHP Web木马扫描器代码分享
Sep 06 PHP
PHP模板引擎Smarty内建函数详解
Apr 11 PHP
php文件上传类完整实例
May 14 PHP
PHP中call_user_func_array回调函数的用法示例
Nov 26 PHP
PHP实现基于图的深度优先遍历输出1,2,3...n的全排列功能
Nov 10 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执行.SQL文件
2013/07/05 PHP
PHP获取指定月份第一天和最后一天的方法
2015/07/18 PHP
出现“不能执行已释放的Script代码”错误的原因及解决办法
2007/08/29 Javascript
javascript 鼠标滚轮事件
2009/04/09 Javascript
js 禁用只读文本框获得焦点时的退格键
2010/04/25 Javascript
JavaScript prototype属性深入介绍
2012/11/27 Javascript
javascript利用apply和arguments复用方法
2013/11/25 Javascript
详解Angular2组件之间如何通信
2017/06/22 Javascript
JavaScript实现精美个性导航栏筋斗云效果
2017/10/29 Javascript
JS浅拷贝和深拷贝原理与实现方法分析
2019/02/28 Javascript
layui form表单提交后实现自动刷新
2019/10/25 Javascript
js实现二级联动简单实例
2020/01/11 Javascript
vuex+axios+element-ui实现页面请求loading操作示例
2020/02/02 Javascript
Python获取脚本所在目录的正确方法
2014/04/15 Python
python类装饰器用法实例
2015/06/04 Python
Python实现基本数据结构中队列的操作方法示例
2017/12/04 Python
Python3生成手写体数字方法
2018/01/30 Python
Python反射的用法实例分析
2018/02/11 Python
python实现将文件夹下面的不是以py文件结尾的文件都过滤掉的方法
2018/10/21 Python
pycharm激活码快速激活及使用步骤
2020/03/12 Python
html5各种页面切换效果和模态对话框用法总结
2014/12/15 HTML / CSS
使用Html5多媒体实现微信语音功能
2019/07/26 HTML / CSS
W Concept美国:精选全球独立设计师
2017/02/22 全球购物
德国baby-markt婴儿用品瑞士网站:baby-markt.ch
2017/06/09 全球购物
JENNIFER BEHR官网:各种耳环和发饰
2020/06/07 全球购物
介绍一下javax.servlet.Servlet接口及其主要方法
2015/11/30 面试题
建筑施工员岗位职责
2013/11/26 职场文书
校庆筹备方案
2014/03/30 职场文书
二手房购房协议书范本
2014/10/05 职场文书
2014年安全生产工作总结
2014/11/13 职场文书
2014年图书管理员工作总结
2014/12/01 职场文书
婚礼答谢词
2015/01/04 职场文书
幼儿园老师工作总结2015
2015/05/22 职场文书
在职证明范本
2015/06/15 职场文书
企业法律事务工作总结
2015/08/11 职场文书
Python import模块的缓存问题解决方案
2021/06/02 Python