第十一节--重载


Posted in PHP onNovember 16, 2006

/*
+-------------------------------------------------------------------------------+
| = 本文为Haohappy读<<Core PHP Programming>> 
| = 中Classes and Objects一章的笔记 
| = 翻译为主+个人心得 
| = 为避免可能发生的不必要的麻烦请勿转载,谢谢 
| = 欢迎批评指正,希望和所有PHP爱好者共同进步! 
| = PHP5研究中心: http://blog.csdn.net/haohappy2004
+-------------------------------------------------------------------------------+
*/
第十一节--重载
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文本数据库的搜索方法
Oct 09 PHP
php.ini中文版
Oct 09 PHP
PHP新手上路(五)
Oct 09 PHP
写出高质量的PHP程序
Feb 04 PHP
用PHP实现 上一篇、下一篇的代码
Sep 29 PHP
PHP数组无限分级数据的层级化处理代码
Dec 29 PHP
PHPAnalysis中文分词类详解
Jun 13 PHP
在PHP中使用FastCGI解析漏洞及修复方案
Nov 10 PHP
PHP语法小结之基础和变量
Nov 22 PHP
php验证码生成器
May 24 PHP
PHP文件管理之实现网盘及压缩包的功能操作
Sep 20 PHP
Thinkphp5框架中引入Markdown编辑器操作示例
Jun 03 PHP
第十节--抽象方法和抽象类
Nov 16 #PHP
第九节--绑定
Nov 16 #PHP
第八节--访问方式
Nov 16 #PHP
第七节--类的静态成员
Nov 16 #PHP
第六节--访问属性和方法
Nov 16 #PHP
第五节--克隆
Nov 16 #PHP
第四节--构造函数和析构函数
Nov 16 #PHP
You might like
自己做矿石收音机
2021/03/02 无线电
发布一个迷你php+AJAX聊天程序[聊天室]提供下载
2007/07/21 PHP
测试PHP连接MYSQL成功与否的代码
2013/08/16 PHP
PHP中copy on write写时复制机制介绍
2014/05/13 PHP
PHP执行shell脚本运行程序不产生core文件的方法
2016/12/28 PHP
Laravel中日期时间处理包Carbon的简单使用
2017/09/21 PHP
ThinkPHP框架获取最后一次执行SQL语句及变量调试简单操作示例
2018/06/13 PHP
解决php用mysql方式连接数据库出现Deprecated报错问题
2019/12/25 PHP
LazyForm jQuery plugin 定制您的CheckBox Radio和Select
2009/10/24 Javascript
在Ajax中使用Flash实现跨域数据读取的实现方法
2010/12/02 Javascript
jQuery 属性选择器element[herf*='value']使用示例
2013/10/20 Javascript
sencha touch 模仿tabpanel导航栏TabBar的实例代码
2013/10/24 Javascript
javascript 函数及作用域总结介绍
2013/11/12 Javascript
原生js实现ajax方法(超简单)
2016/09/20 Javascript
js中数组插入、删除元素操作的方法
2017/02/15 Javascript
jQuery实现文章图片弹出放大效果
2017/04/06 jQuery
Vue学习之路之登录注册实例代码
2017/07/06 Javascript
bootstrap-table.js扩展分页工具栏(增加跳转到xx页)功能
2017/12/28 Javascript
Vue组件间数据传递的方式(3种)
2020/07/13 Javascript
javascript实现扫雷简易版
2020/08/18 Javascript
详解Vue3 Teleport 的实践及原理
2020/12/02 Vue.js
[03:03]2014DOTA2西雅图国际邀请赛 Alliance战队巡礼
2014/07/07 DOTA
python实现在pandas.DataFrame添加一行
2018/04/04 Python
Python Selenium Cookie 绕过验证码实现登录示例代码
2018/04/10 Python
详解Python_shutil模块
2019/03/15 Python
python实现发送form-data数据的方法详解
2019/09/27 Python
Python如何把字典写入到CSV文件的方法示例
2020/08/23 Python
HTML5 source标签:媒介元素定义媒介资源
2018/01/29 HTML / CSS
AmazeUI 模态窗口的实现代码
2020/08/18 HTML / CSS
女大学生个人求职信
2013/12/09 职场文书
竞选班长自荐书范文
2014/03/09 职场文书
产品质量承诺书
2014/03/27 职场文书
运动会方队口号
2014/06/07 职场文书
上党课的心得体会
2014/09/02 职场文书
戒赌保证书
2015/05/11 职场文书
2016年党员创先争优承诺书
2016/03/25 职场文书