第十一节 重载 [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 相关文章推荐
Zend公司全球首推PHP认证
Oct 09 PHP
PHP脚本的10个技巧(7)
Oct 09 PHP
PHP session有效期问题
Apr 26 PHP
php foreach、while性能比较
Oct 15 PHP
php循环检测目录是否存在并创建(循环创建目录)
Jan 06 PHP
php中根据某年第几天计算出日期年月日的代码
Feb 24 PHP
怎样使用php与jquery设置和读取cookies
Aug 08 PHP
PHP判断变量是否为0的方法
Feb 08 PHP
php微信支付接口开发程序
Aug 02 PHP
php基于自定义函数记录log日志方法
Jul 21 PHP
thinkphp3.2实现在线留言提交验证码功能
Jul 19 PHP
laravel框架使用FormRequest进行表单验证,验证异常返回JSON操作示例
Feb 18 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
历史证明,懒惰才是推动科学发展技术进步的动力
2021/03/02 无线电
PHP面向对象的使用教程 简单数据库连接
2006/11/25 PHP
使用PHP如何实现高效安全的ftp服务器(二)
2015/12/30 PHP
javascript数组去重3种方法的性能测试与比较
2013/03/26 Javascript
原生Js实现元素渐隐/渐现(原理为修改元素的css透明度)
2013/06/24 Javascript
页面载入结束自动调用js函数示例
2013/09/23 Javascript
JavaScript操作表单实例讲解(上)
2016/06/20 Javascript
js中scrollTop()方法和scroll()方法用法示例
2016/10/03 Javascript
Ubuntu 16.04 64位中搭建Node.js开发环境教程
2016/10/19 Javascript
jQuery实现自动调用和触发某个事件的方法
2016/11/18 Javascript
js实现的xml对象转json功能示例
2016/12/24 Javascript
vue.js框架实现表单排序和分页效果
2017/08/09 Javascript
微信小程序签到功能
2018/10/31 Javascript
浅谈webpack 四个核心概念之Entry
2019/06/12 Javascript
vue分页器组件编写方法详解
2019/06/28 Javascript
javascript的惯性运动实现代码实例
2019/09/07 Javascript
nodejs制作小爬虫功能示例
2020/02/24 NodeJs
微信小程序实现录制、试听、上传音频功能(带波形图)
2020/02/27 Javascript
javascript中可能用得到的全部的排序算法
2020/03/05 Javascript
小程序中的箭头函数的具体使用
2020/06/19 Javascript
[02:17]DOTA2亚洲邀请赛 RAVE战队出场宣传片
2015/02/07 DOTA
python列出目录下指定文件与子目录的方法
2015/07/03 Python
使用Python下载歌词并嵌入歌曲文件中的实现代码
2015/11/13 Python
详解如何利用Cython为Python代码加速
2018/01/27 Python
数组保存为txt, npy, csv 文件, 数组遍历enumerate的方法
2018/07/09 Python
python多线程扫描端口(线程池)
2019/09/04 Python
Python爬虫实现的根据分类爬取豆瓣电影信息功能示例
2019/09/15 Python
Python异常模块traceback用法实例分析
2019/10/22 Python
Django实现CAS+OAuth2的方法示例
2019/10/30 Python
解决IDEA 的 plugins 搜不到任何的插件问题
2020/05/04 Python
Python爬虫爬取糗事百科段子实例分享
2020/07/31 Python
HTML5中input输入框默认提示文字向左向右移动的示例代码
2020/09/10 HTML / CSS
BASIC HOUSE官方旗舰店:韩国著名的服装品牌
2018/09/27 全球购物
饭店工作计划书
2014/01/10 职场文书
销售业务员岗位职责
2015/02/13 职场文书
毕业班班主任工作总结2015
2015/07/23 职场文书