第十一节--重载


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 相关文章推荐
第十二节--类的自动加载
Nov 16 PHP
PHP 实现类似js中alert() 提示框
Mar 18 PHP
php使用正则表达式进行字符串搜索的方法
Mar 23 PHP
ThinkPHP框架搭建及常见问题(XAMPP安装失败、Apache/MySQL启动失败)
Apr 15 PHP
Yii2搭建后台并实现rbac权限控制完整实例教程
Apr 28 PHP
PHP实现原生态图片上传封装类方法
Nov 08 PHP
php+redis在实际项目中HTTP 500: Internal Server Error故障排除
Feb 05 PHP
用PHP将Unicode 转化为UTF-8的实现方法(推荐)
Feb 08 PHP
PHP使用preg_split和explode分割textarea存放内容的方法分析
Jul 03 PHP
php设计模式之单例模式用法经典示例分析
Sep 20 PHP
layui数据表格自定义每页条数limit设置
Oct 26 PHP
tp5.1 框架数据库-数据集操作实例分析
May 26 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
利用static实现表格的颜色隔行显示的代码
2007/09/02 PHP
PHP IF ELSE简化/三元一次式的使用
2011/08/22 PHP
封装ThinkPHP的一个文件上传方法实例
2014/10/31 PHP
WordPress的主题编写中获取头部模板和底部模板
2015/12/28 PHP
调用WordPress函数统计文章访问量及PHP原生计数器的实现
2016/03/21 PHP
PHP数组对象与Json转换操作实例分析
2019/10/22 PHP
dojo 之基础篇
2007/03/24 Javascript
JavaScript 事件系统
2010/07/22 Javascript
解析dom中的children对象数组元素firstChild,lastChild的使用
2013/07/10 Javascript
浏览器兼容console对象的简要解决方案分享
2013/10/24 Javascript
详解javascript中的事件处理
2015/11/06 Javascript
JS代码防止SQL注入的方法(超简单)
2016/04/12 Javascript
AngularJS控制器继承自另一控制器
2016/05/09 Javascript
Nodejs 搭建简单的Web服务器详解及实例
2016/11/30 NodeJs
基于jQuery实现左侧菜单栏可折叠功能
2016/12/27 Javascript
原生js实现秒表计时器功能
2017/02/16 Javascript
js+canvas实现动态吃豆人效果
2017/03/22 Javascript
jQuery无冲突模式详解
2019/01/17 jQuery
基于vue-cli搭建多模块且各模块独立打包的项目
2019/06/12 Javascript
vue下canvas裁剪图片实例讲解
2020/04/16 Javascript
JavaScript中EventBus实现对象之间通信
2020/10/18 Javascript
jquery实现鼠标悬浮弹出气泡提示框
2020/12/23 jQuery
Python中为feedparser设置超时时间避免堵塞
2014/09/28 Python
Linux下为不同版本python安装第三方库
2016/08/31 Python
Python用sndhdr模块识别音频格式详解
2018/01/11 Python
解决pandas中读取中文名称的csv文件报错的问题
2018/07/04 Python
python根据txt文本批量创建文件夹
2020/12/08 Python
如何基于Python按行合并两个txt
2020/11/03 Python
HTML5制作酷炫音频播放器插件图文教程
2014/12/30 HTML / CSS
德国咖啡批发商:Coffeefair
2019/08/26 全球购物
计算机专业学生的自我评价
2013/12/15 职场文书
护士2015年终工作总结
2015/04/29 职场文书
机关干部正风肃纪心得体会
2016/01/15 职场文书
详解Python描述符的工作原理
2021/06/11 Python
《艾尔登法环》发布最新「战技」宣传片
2022/04/03 其他游戏
【D4DJ】美少女DJ企划 动画将于明年冬季开播第2季
2022/04/11 日漫