第十一节--重载


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 相关文章推荐
利用文件属性结合Session实现在线人数统计
Oct 09 PHP
人大复印资料处理程序_输入篇
Oct 09 PHP
用PHP实现图象锐化代码
Jun 14 PHP
在普通HTTP上安全地传输密码
Jul 21 PHP
memcached 和 mysql 主从环境下php开发代码详解
May 16 PHP
在windows服务器开启php的gd库phpinfo中未发现
Jan 13 PHP
PHP不用递归遍历目录下所有文件的代码
Jul 04 PHP
PHP Filter过滤器全面解析
Aug 09 PHP
php reset() 函数指针指向数组中的第一个元素并输出实例代码
Nov 21 PHP
PHP基于迭代实现文件夹复制、删除、查看大小等操作的方法
Aug 11 PHP
PHP递归遍历文件夹去除注释并压缩php源代码的方法示例
May 23 PHP
php实现的rc4加密解密类定义与用法示例
Aug 16 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的超级变量$_POST获取HTML表单(HTML Form) 数据
2011/05/07 PHP
使用 PHP Masked Package 屏蔽敏感数据的实现方法
2019/10/15 PHP
Alliance vs AM BO3 第一场2.13
2021/03/10 DOTA
javascript 哈希表(hashtable)的简单实现
2010/01/20 Javascript
使用Post提交时须将空格转换成加号的解释
2013/01/14 Javascript
jquery实现图片翻页效果
2013/12/23 Javascript
jQuery 1.9.1源码分析系列(十五)之动画处理
2015/12/03 Javascript
自动完成的搜索框javascript实现
2016/02/26 Javascript
JQuery导航菜单选择特效
2016/04/11 Javascript
JS组件Bootstrap实现弹出框效果代码
2016/04/26 Javascript
JS实现左右无缝轮播图代码
2016/05/01 Javascript
AngularJS中的API(接口)简单实现
2016/07/28 Javascript
浅析Javascript的自动分号插入(ASI)机制
2016/09/29 Javascript
如何使用Bootstrap 按钮实例详解
2017/03/29 Javascript
VueJS 集成 Medium Editor的示例代码 (自定义编辑器按钮)
2017/08/24 Javascript
详解webpack打包第三方类库的正确姿势
2018/10/20 Javascript
vue中的.$mount('#app')手动挂载操作
2020/09/02 Javascript
详解Python编程中对Monkey Patch猴子补丁开发方式的运用
2016/05/27 Python
Python字典实现简单的三级菜单(实例讲解)
2017/07/31 Python
Python实现变量数值交换及判断数组是否含有某个元素的方法
2017/09/18 Python
python批量从es取数据的方法(文档数超过10000)
2018/12/27 Python
python 定时器,轮询定时器的实例
2019/02/20 Python
keras小技巧——获取某一个网络层的输出方式
2020/05/23 Python
Python爬虫获取页面所有URL链接过程详解
2020/06/04 Python
HTML5 canvas实现雪花飘落特效
2016/03/08 HTML / CSS
New Balance澳大利亚官网:运动鞋和健身服装
2019/02/23 全球购物
在子网210.27.48.21/30种有多少个可用地址?分别是什么?
2014/07/27 面试题
软件测试笔试题
2012/10/25 面试题
公司离职证明范本
2014/01/13 职场文书
关于旷工的检讨书
2014/02/02 职场文书
禁止酒驾标语
2014/06/25 职场文书
2014年英语工作总结
2014/12/20 职场文书
受欢迎的自荐信,就这么写!
2019/04/19 职场文书
Python 用户输入和while循环的操作
2021/05/23 Python
python-opencv 中值滤波{cv2.medianBlur(src, ksize)}的用法
2021/06/05 Python
总结一些Java常用的加密算法
2021/06/11 Java/Android