第十一节 重载 [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类
Nov 27 PHP
php Http_Template_IT类库进行模板替换
Mar 19 PHP
php数组一对一替换实现代码
Aug 31 PHP
php5.3中连接sqlserver2000的两种方法(com与ODBC)
Dec 29 PHP
PHP字符串的编码问题的详细介绍
Apr 27 PHP
PHP编程中的常见漏洞和代码实例
Aug 06 PHP
PHP Session机制简介及用法
Aug 19 PHP
php使用$_POST或$_SESSION[]向js函数传参
Sep 16 PHP
php文件缓存方法总结
Mar 16 PHP
Symfony2创建基于域名的路由相关示例
Nov 14 PHP
cakephp常见知识点汇总
Feb 24 PHP
Laravel框架源码解析之反射的使用详解
May 14 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配置文件php.ini的路径的方法
2014/08/20 PHP
PHP中Closure类的使用方法及详解
2015/10/09 PHP
PHP中关键字interface和implements详解
2017/06/14 PHP
JavaScript开发时的五个注意事项
2007/12/08 Javascript
JavaScript学习笔记(十七)js 优化
2010/02/04 Javascript
jQuery 树形结构的选择器
2010/02/15 Javascript
JavaScript CSS修改学习第三章 修改样式表
2010/02/19 Javascript
基于mootools插件实现遮罩层新手引导
2012/05/24 Javascript
JS获取图片实际宽高及根据图片大小进行自适应
2013/08/11 Javascript
JS中attr和prop属性的区别以及优先选择示例介绍
2014/06/30 Javascript
node.js下LDAP查询实例分享
2015/09/30 Javascript
深入分析node.js的异步API和其局限性
2016/09/05 Javascript
JavaScript基于对象去除数组重复项的方法
2016/10/09 Javascript
浅谈Angular路由守卫
2017/08/26 Javascript
Angular中封装fancyBox(图片预览)遇到问题小结
2017/09/01 Javascript
Node.js学习之地址解析模块URL的使用详解
2017/09/28 Javascript
vuex 中插件的编写案例解析
2019/06/10 Javascript
VUE DEMO之模拟登录个人中心页面之间数据传值实例
2019/10/31 Javascript
从源码角度来回答keep-alive组件的缓存原理
2021/01/18 Javascript
初步解析Python下的多进程编程
2015/04/28 Python
python实现爬虫下载美女图片
2015/07/14 Python
python虚拟环境virualenv的安装与使用
2016/12/18 Python
Python使用filetype精确判断文件类型
2017/07/02 Python
python实现猜数字小游戏
2020/03/24 Python
PYTHON实现SIGN签名的过程解析
2019/10/28 Python
英国翻新电子产品购物网站:Tech Trade
2017/12/25 全球购物
服务中心夜班服务员岗位职责
2013/11/27 职场文书
黄金搭档广告词
2014/03/21 职场文书
品牌宣传方案
2014/03/21 职场文书
诚信考试倡议书
2014/04/15 职场文书
投标授权委托书范文
2014/08/02 职场文书
2014光棍节单身联谊活动策划书
2014/10/10 职场文书
见习报告怎么写
2014/10/31 职场文书
个人工作总结怎么写?
2019/04/09 职场文书
react中props 的使用及进行限制的方法
2021/04/28 Javascript
js实现模拟购物商城案例
2021/05/18 Javascript