第十一节 重载 [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 相关文章推荐
实现 win2003 下 mysql 数据库每天自动备份
Dec 06 PHP
PHP Token(令牌)设计
Mar 15 PHP
Windows7下PHP开发环境安装配置图文方法
May 20 PHP
php使用str_replace实现输入框回车替换br的方法
Nov 24 PHP
thinkPHP实现瀑布流的方法
Nov 29 PHP
php使用explode()函数将字符串拆分成数组的方法
Feb 17 PHP
Laravel构建即时应用的一种实现方法详解
Aug 31 PHP
PHP实现微信退款功能
Oct 02 PHP
PHP正则匹配到2个字符串之间的内容方法
Dec 24 PHP
使用vs code编辑调试php配置的方法
Jan 29 PHP
php+js实现点赞功能的示例详解
Aug 07 PHP
PHP之header函数详解
Mar 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
一个SQL管理员的web接口
2006/10/09 PHP
PHP函数常用用法小结
2010/02/08 PHP
Zend Framework中的简单工厂模式 图文
2012/07/10 PHP
php表单请求获得数据求和示例
2014/05/15 PHP
最新制作ThinkPHP3.2.3完全开发手册
2015/11/23 PHP
在WordPress中使用wp_count_posts函数来统计文章数量
2016/01/05 PHP
Yii2搭建后台并实现rbac权限控制完整实例教程
2016/04/28 PHP
浅析php中array_map和array_walk的使用对比
2016/11/20 PHP
php新建文件的方法实例
2019/09/26 PHP
PHP全局使用Laravel辅助函数dd
2019/12/26 PHP
javascript 兼容鼠标滚轮事件
2009/04/07 Javascript
替代window.event.srcElement效果的可兼容性的函数
2009/12/18 Javascript
简单的代码实现jquery定时器
2014/01/03 Javascript
jquery文档操作wrap()方法实例简述
2015/01/10 Javascript
每天一篇javascript学习小结(RegExp对象)
2015/11/17 Javascript
详解React项目的服务端渲染改造(koa2+webpack3.11)
2018/03/19 Javascript
使用koa-log4管理nodeJs日志笔记的使用方法
2018/11/30 NodeJs
vue无限轮播插件代码实例
2019/05/10 Javascript
layui 表格操作列按钮动态显示的实现方法
2019/09/06 Javascript
JavaScript React如何修改默认端口号方法详解
2020/07/28 Javascript
原生js+canvas实现下雪效果
2020/08/02 Javascript
python实现系统状态监测和故障转移实例方法
2013/11/18 Python
浅谈dataframe中更改列属性的方法
2018/07/10 Python
python 常用的基础函数
2018/07/10 Python
Python 使用双重循环打印图形菱形操作
2020/08/09 Python
Python如何telnet到网络设备
2021/02/18 Python
用CSS3打造HTML5的Logo(实现代码)
2016/06/16 HTML / CSS
营业员实习自我鉴定
2013/12/07 职场文书
中学生家长评语大全
2014/04/16 职场文书
六查六看六改心得体会
2014/10/14 职场文书
写给妈妈的感谢信
2015/01/22 职场文书
领导干部学习心得体会
2016/01/23 职场文书
《酸的和甜的》教学反思
2016/02/18 职场文书
六年级情感作文之500字
2019/10/23 职场文书
使用ORM新增数据在Mysql中的操作步骤
2021/07/26 MySQL
Python PIL按比例裁剪图片
2022/05/11 Python