第十一节--重载


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安全性问题中的:Null 字符问题
Jun 21 PHP
实例讲解PHP面向对象之多态
Aug 20 PHP
一个比较不错的PHP日历类分享
Nov 18 PHP
Laravel实现用户注册和登录
Jan 23 PHP
简单解决新浪SAE无法上传文件的问题
May 13 PHP
php操作redis缓存方法分享
Jun 03 PHP
php实现SAE上使用storage上传与下载文件的方法
Jun 29 PHP
浅谈php的优缺点
Jul 14 PHP
关于php中的json_encode()和json_decode()函数的一些说明
Nov 20 PHP
Redis在Laravel项目中的应用实例详解
Aug 11 PHP
PHP DB 数据库连接类定义与用法示例
Mar 11 PHP
Laravel框架实现多个视图共享相同数据的方法详解
Jul 09 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代码飞起来的40条小技巧(提升php效率)
2010/04/12 PHP
php递归删除指定文件夹的方法小结
2015/04/20 PHP
PHP匿名函数(闭包函数)详解
2019/03/22 PHP
浅析PHP7的多进程及实例源码
2019/04/14 PHP
PHP常用工具函数小结【移除XSS攻击、UTF8与GBK编码转换等】
2019/04/27 PHP
php设计模式之原型模式分析【星际争霸游戏案例】
2020/03/23 PHP
读jQuery之一(对象的组成)
2011/06/11 Javascript
jQuery使用andSelf()来包含之前的选择集
2014/05/19 Javascript
JS 在指定数组中随机取出N个不重复的数据
2014/06/10 Javascript
javascript实现playfair和hill密码算法
2014/12/07 Javascript
完美兼容IE,chrome,ff的设为首页、加入收藏及保存到桌面js代码
2014/12/17 Javascript
js实现仿百度瀑布流的方法
2015/02/05 Javascript
jquery实现键盘左右翻页特效
2015/04/30 Javascript
JQuery中节点遍历方法实例
2015/05/18 Javascript
Javascript 6里的4个新语法
2016/08/25 Javascript
Javascript中关于Array.filter()的妙用详解
2016/12/04 Javascript
vue.js内部自定义指令与全局自定义指令的实现详解(利用directive)
2017/07/11 Javascript
解决VUE框架 导致绑定事件的阻止冒泡失效问题
2018/02/24 Javascript
create-react-app 修改为多入口编译的方法
2018/08/01 Javascript
Vue路由模块化配置的完整步骤
2019/08/14 Javascript
JQuery常用选择器功能与用法实例分析
2019/12/23 jQuery
解决vue addRoutes不生效问题
2020/08/04 Javascript
js节流防抖应用场景,以及在vue中节流防抖的具体实现操作
2020/09/21 Javascript
Python3.5装饰器原理及应用实例详解
2019/04/30 Python
python变量的存储原理详解
2019/07/10 Python
PyCharm取消波浪线、下划线和中划线的实现
2020/03/03 Python
python实现用户名密码校验
2020/03/18 Python
Python装饰器实现方法及应用场景详解
2020/03/26 Python
美国最大的珠宝首饰网上商城:Jewelry.com
2016/07/22 全球购物
英国最大的邮寄种子和植物公司:Thompson & Morgan
2017/09/21 全球购物
经典c++面试题三
2015/07/08 面试题
陈欧广告词
2014/03/14 职场文书
教师节学生演讲稿
2014/09/03 职场文书
2014年平安建设工作总结
2014/11/19 职场文书
催款函怎么写
2015/06/24 职场文书
Springboot集成阿里云OSS上传文件系统教程
2021/06/28 Java/Android