第十一节 重载 [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 相关文章推荐
生成ubuntu自动切换壁纸xml文件的php代码
Jul 17 PHP
PHP读取ACCESS数据到MYSQL的代码
May 11 PHP
PHP输出当前进程所有变量/常量/模块/函数/类的示例
Nov 07 PHP
PHP程序漏洞产生的原因分析与防范方法说明
Mar 06 PHP
php实现文件下载简单示例(代码实现文件下载)
Mar 10 PHP
PHP中file_get_contents高?用法实例
Sep 24 PHP
为你总结一些php系统类函数
Oct 21 PHP
PHP表单数据写入MySQL数据库的代码
May 31 PHP
浅谈PHP中静态方法和非静态方法的相互调用
Oct 04 PHP
谈谈从phpinfo中能获取哪些值得注意的信息
Mar 28 PHP
PHP如何根据文件头检测文件类型实例代码
Oct 14 PHP
laravel 框架配置404等异常页面
Jan 07 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中如何实现常用邮箱的基本判断
2014/01/07 PHP
zf框架的校验器使用使用示例(自定义校验器和校验器链)
2014/03/13 PHP
php中单个数据库字段多列显示(单字段分页、横向输出)
2014/07/28 PHP
php中使用sftp教程
2015/03/30 PHP
PHP实现中文圆形印章特效
2015/06/19 PHP
PHP基于面向对象实现的留言本功能实例
2018/04/04 PHP
js 代码集(学习js的朋友可以看下)
2009/07/22 Javascript
火狐textarea输入法的bug的触发及解决
2013/07/24 Javascript
详谈nodejs异步编程
2014/12/04 NodeJs
jQuery 实现侧边浮动导航菜单效果
2014/12/26 Javascript
JS使用ajax方法获取指定url的head信息中指定字段值的方法
2015/03/24 Javascript
js实现简单的联动菜单效果
2015/08/19 Javascript
微信小程序拍照和摄像功能实现方法示例
2019/02/01 Javascript
mpvue开发音频类小程序踩坑和建议详解
2019/03/12 Javascript
如何阻止小程序遮罩层下方图层滚动
2019/09/05 Javascript
JavaScript实现手机号码 3-4-4格式并控制新增和删除时光标的位置
2020/06/02 Javascript
Vue获取微博授权URL代码实例
2020/11/04 Javascript
vue的hash值原理也是table切换实例代码
2020/12/14 Vue.js
vue中配置scss全局变量的步骤
2020/12/28 Vue.js
[06:53]2018DOTA2国际邀请赛寻真——为复仇而来的Newbee
2018/08/15 DOTA
python时间整形转标准格式的示例分享
2014/02/14 Python
Python中文件I/O高效操作处理的技巧分享
2017/02/04 Python
python用Pygal如何生成漂亮的SVG图像详解
2017/02/10 Python
Windows下的Jupyter Notebook 安装与自定义启动(图文详解)
2018/02/21 Python
python实现写数字文件名的递增保存文件方法
2018/10/25 Python
Python补齐字符串长度的实例
2018/11/15 Python
Django JWT Token RestfulAPI用户认证详解
2019/01/23 Python
python中time库的实例使用方法
2019/10/31 Python
新手常见Python错误及异常解决处理方案
2020/06/18 Python
使用bandit对目标python代码进行安全函数扫描的案例分析
2021/01/27 Python
制药工程专业毕业生推荐信
2013/12/24 职场文书
领导班子三严三实对照检查材料
2014/09/25 职场文书
颐和园导游词400字
2015/01/30 职场文书
个人承诺书格式范文
2015/04/29 职场文书
python 安全地删除列表元素的方法
2022/03/16 Python
Java版 单机五子棋
2022/05/04 Java/Android