第十一节 重载 [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 相关文章推荐
Windows下的PHP5.0详解
Nov 18 PHP
php 分页类 扩展代码
Jun 11 PHP
一个PHP分页类的代码
May 18 PHP
php 转换字符串编码 iconv与mb_convert_encoding的区别说明
Nov 10 PHP
PHP读取PPT文件的方法
Dec 10 PHP
WordPress主题中添加文章列表页页码导航的PHP代码实例
Dec 22 PHP
Symfony2学习笔记之系统路由详解
Mar 17 PHP
Symfony2框架创建项目与模板设置实例详解
Mar 17 PHP
PHP封装的数据库保存session功能类
Jul 11 PHP
ThinkPHP5.0多个文件上传后找不到临时文件的修改方法
Jul 30 PHP
PHP chop()函数讲解
Feb 11 PHP
详细分析PHP 命名空间(namespace)
Jun 30 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安全开发 添加随机字符串验证,防止伪造跨站请求
2013/02/14 PHP
PHP答题类应用接口实例
2015/02/09 PHP
PHP文件缓存smarty模板应用实例分析
2016/02/26 PHP
php接口实现拖拽排序功能
2018/04/23 PHP
PHP addcslashes()函数讲解
2019/02/03 PHP
关于js日期转化为毫秒数“节省20%的效率和和节省9个字符“问题
2012/03/01 Javascript
jquery怎样实现ajax联动框(一)
2013/03/08 Javascript
Javascript alert消息换行的方法
2013/08/07 Javascript
jquery实现加载等待效果示例
2013/09/25 Javascript
轻松创建nodejs服务器(9):实现非阻塞操作
2014/12/18 NodeJs
JS实现判断滚动条滚到页面底部并执行事件的方法
2014/12/18 Javascript
jQuery+CSS3实现树叶飘落特效
2015/02/01 Javascript
JS实现至少包含字母、大小写数字、字符的密码等级的两种方法
2015/02/03 Javascript
封装了jQuery的Ajax请求全局配置
2015/02/05 Javascript
微信公众平台开发教程(六)获取个性二维码的实例
2016/12/02 Javascript
Node.js的Mongodb使用实例
2016/12/30 Javascript
javascript判断元素存在和判断元素存在于实时的dom中的方法
2017/01/17 Javascript
JavaScript实现的仿新浪微博原生态输入字数即时检查功能【兼容IE6】
2017/09/26 Javascript
关于在LayUI中使用AJAX提交巨坑记录
2019/10/25 Javascript
jQuery实现可以扩展的日历
2020/12/01 jQuery
[17:00]DOTA2 HEROS教学视频教你分分钟做大人-帕克
2014/06/10 DOTA
[32:17]完美世界DOTA2联赛循环赛LBZS vs Forest第二场 10月30日
2020/10/31 DOTA
详解Numpy数组转置的三种方法T、transpose、swapaxes
2019/05/27 Python
python+openCV利用摄像头实现人员活动检测
2019/06/22 Python
Python3.8对可迭代解包的改进及用法详解
2019/10/15 Python
使用批处理脚本自动生成并上传NuGet包(操作方法)
2019/11/19 Python
解决Keras 与 Tensorflow 版本之间的兼容性问题
2020/02/07 Python
HTML5 自动聚焦(autofocus)属性使用介绍
2013/08/07 HTML / CSS
经典C++面试题一
2016/11/06 面试题
给朋友的道歉信
2014/01/09 职场文书
《莫高窟》教学反思
2014/02/25 职场文书
《彩色世界》教学反思
2014/04/12 职场文书
2015年党员干部承诺书
2015/01/21 职场文书
培训通知书模板
2015/04/17 职场文书
教师个人工作总结范文2015
2015/10/14 职场文书
HTML实现仿Windows桌面主题特效的实现
2022/06/28 HTML / CSS