第十一节--重载


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中static静态变量的使用方法详解
Jun 04 PHP
php若干单维数组遍历方法的比较
Sep 20 PHP
巧用php中的array_filter()函数去掉多维空值的代码分享
Sep 07 PHP
PHP Session 变量的使用方法详解与实例代码
Sep 11 PHP
PHP+FastCGI+Nginx配置PHP运行环境
Aug 07 PHP
php输出xml必须header的解决方法
Oct 17 PHP
PHP缓存集成库phpFastCache用法
Dec 15 PHP
php中最简单的字符串匹配算法
Dec 16 PHP
浅谈本地WAMP环境的搭建
May 13 PHP
学习php设计模式 php实现状态模式
Dec 07 PHP
php str_getcsv把字符串解析为数组的实现方法
Apr 05 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
php&amp;java(三)
2006/10/09 PHP
弄了个检测传输的参数是否为数字的Function
2006/12/06 PHP
PHP图形计数器程序显示网站用户浏览量
2016/07/20 PHP
PHP中include/require/include_once/require_once使用心得
2016/08/28 PHP
PHP配合fiddler抓包抓取微信指数小程序数据的实现方法分析
2020/01/02 PHP
如何简单地用YUI做JavaScript动画
2007/03/10 Javascript
ExtJS 2.0实用简明教程之应用ExtJS
2009/04/29 Javascript
jQuery+ajax实现顶一下,踩一下效果
2010/07/17 Javascript
window.location.hash 使用说明
2010/11/08 Javascript
jQuery实现指定区域外单击关闭指定层的方法【经典】
2016/06/22 Javascript
分类解析jQuery选择器
2016/11/23 Javascript
PHP+jquery+ajax实现分页
2016/12/09 Javascript
JavaScript调试的多个必备小Tips
2017/01/15 Javascript
angularJS之$http:与服务器交互示例
2017/03/17 Javascript
zTree实现节点修改的实时刷新功能
2017/03/20 Javascript
JS表格组件神器bootstrap table使用指南详解
2017/04/12 Javascript
nodejs 子进程正确的打开方式
2017/07/03 NodeJs
Angularjs的键盘事件的绑定
2017/07/27 Javascript
jQuery实现打开网页自动弹出遮罩层或点击弹出遮罩层功能示例
2017/10/19 jQuery
让 babel webpack vue 配置文件支持智能提示的方法
2019/06/22 Javascript
vue发送websocket请求和http post请求的实例代码
2019/07/11 Javascript
Python中用format函数格式化字符串的用法
2015/04/08 Python
Python一键安装全部依赖包的方法
2019/08/12 Python
Django1.11配合uni-app发起微信支付的实现
2019/10/12 Python
基于logstash实现日志文件同步elasticsearch
2020/08/06 Python
Python基于staticmethod装饰器标示静态方法
2020/10/17 Python
HTML5实现动画效果的方式汇总
2016/02/29 HTML / CSS
中国高端鲜花第一品牌:roseonly(一生只送一人)
2017/02/12 全球购物
台湾三立电视电商平台:电电购
2019/09/09 全球购物
俄罗斯卫浴采暖及维修用品超级市场:Dkrussia
2020/05/12 全球购物
可靠的数据流传输TCP
2016/03/15 面试题
测量实习生自我鉴定
2013/09/19 职场文书
清洁工岗位职责
2014/01/29 职场文书
大学四年个人自我小结
2014/03/05 职场文书
无房证明范本
2014/09/17 职场文书
一次MySQL启动导致的事故实战记录
2021/09/15 MySQL