第十一节--重载


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 相关文章推荐
Apache2 httpd.conf 中文版
Nov 17 PHP
php中显示数组与对象的实现代码
Apr 18 PHP
php中mkdir函数用法实例分析
Nov 15 PHP
Zend Framework开发入门经典教程
Mar 23 PHP
ThinkPHP表单令牌错误的相关解决方法分析
May 20 PHP
PHP Callable强制指定回调类型的方法
Aug 30 PHP
利用php_imagick实现复古效果的方法
Oct 18 PHP
Vagrant(WSL)+PHPStorm+Xdebu 断点调试环境搭建
Dec 13 PHP
TP5框架实现上传多张图片的方法分析
Mar 29 PHP
使用git迁移Laravel项目至新开发环境的步骤详解
Apr 06 PHP
php实现断点续传大文件示例代码
Jun 19 PHP
如何在Laravel之外使用illuminate组件详解
Sep 20 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
无线电广播的开始
2002/01/30 无线电
解决nginx不支持thinkphp中pathinfo的问题
2015/07/21 PHP
PHP的自定义模板引擎
2017/03/24 PHP
thinkphp5.0整合phpsocketio完整攻略(绕坑)
2018/10/12 PHP
ThinkPHP3.2框架操作Redis的方法分析
2019/05/05 PHP
javascript preload&amp;lazy load
2010/05/13 Javascript
基于jQuery实现的QQ表情插件
2015/08/25 Javascript
JavaScript实现上下浮动的窗口效果代码
2015/10/12 Javascript
AngularJS模块学习之Anchor Scroll
2016/01/19 Javascript
jQuery+css3实现转动的正方形效果(附demo源码下载)
2016/01/27 Javascript
如何快速上手Vuex
2017/02/14 Javascript
简单实现js鼠标跟随效果
2020/08/02 Javascript
javascript计算对象长度的方法
2017/10/25 Javascript
微信小程序map组件结合高德地图API实现wx.chooseLocation功能示例
2019/01/23 Javascript
three.js 如何制作魔方
2020/07/31 Javascript
[01:10]DOTA2次级职业联赛 - U5战队宣传片
2014/12/01 DOTA
python操作ie登陆土豆网的方法
2015/05/09 Python
django输出html内容的实例
2018/05/27 Python
Python2和Python3中urllib库中urlencode的使用注意事项
2018/11/26 Python
pandas分别写入excel的不同sheet方法
2018/12/11 Python
Python微医挂号网医生数据抓取
2019/01/24 Python
django序列化serializers过程解析
2019/12/14 Python
Django {{ MEDIA_URL }}无法显示图片的解决方式
2020/04/07 Python
Django正则URL匹配实现流程解析
2020/11/13 Python
Python列表的深复制和浅复制示例详解
2021/02/12 Python
CSS3+JavaScript实现炫酷呼吸效果的示例代码
2020/06/15 HTML / CSS
奥兰多迪士尼门票折扣:Undercover Tourist
2018/07/09 全球购物
吉尔德利巧克力公司:Ghirardelli Chocolate Company
2019/03/27 全球购物
线程问题:wait()方法是定义在哪个类里面
2015/07/07 面试题
企划专员岗位职责
2013/12/09 职场文书
如何写好建议书
2014/03/13 职场文书
年会搞笑主持词串词
2014/03/24 职场文书
安全承诺书范文
2014/03/26 职场文书
《埃及的金字塔》教学反思
2014/04/07 职场文书
白血病募捐倡议书
2014/05/14 职场文书
给女朋友的道歉短信
2015/05/12 职场文书