第十一节--重载


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 相关文章推荐
生成sessionid和随机密码的例子
Oct 09 PHP
for循环连续求和、九九乘法表代码
Feb 20 PHP
php模拟ping命令(php exec函数的使用方法)
Oct 25 PHP
laravel容器延迟加载以及auth扩展详解
Mar 02 PHP
WordPress分页伪静态加html后缀
Jun 08 PHP
PHP编程实现多维数组按照某个键值排序的方法小结【2种方法】
Apr 27 PHP
Yii2框架实现登录、退出及自动登录功能的方法详解
Oct 24 PHP
从ThinkPHP3.2.3过渡到ThinkPHP5.0学习笔记图文详解
Apr 03 PHP
Laravel框架Request、Response及Session操作示例
May 06 PHP
php常用日期时间函数实例小结
Jul 04 PHP
Thinkphp5框架使用validate实现验证功能的方法
Aug 27 PHP
如何理解PHP核心特性命名空间
May 28 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
浅析is_writable的php实现
2013/06/18 PHP
PHP迭代器实现斐波纳契数列的函数
2013/11/12 PHP
ThinkPHP中的create方法与自动令牌验证实例教程
2014/08/22 PHP
PHP使用星号隐藏用户名,手机和邮箱的实现方法
2016/09/22 PHP
php实现保存周期为1天的购物车类
2017/07/07 PHP
javascript dom 操作详解 js加强
2009/07/13 Javascript
锋利的jQuery 要点归纳(二) jQuery中的DOM操作(下)
2010/03/23 Javascript
10个基于jQuery或JavaScript的WYSIWYG 编辑器整理
2010/05/06 Javascript
jQuery Pagination Ajax分页插件(分页切换时无刷新与延迟)中文翻译版
2013/01/11 Javascript
js导航菜单(自写)简单大方
2013/03/28 Javascript
基于React.js实现原生js拖拽效果引发的思考
2016/03/30 Javascript
原生js实现class的添加和删除简单代码
2016/07/12 Javascript
正则验证小数点后面只能有两位数的方法
2017/02/28 Javascript
详解nodejs实现本地上传图片并预览功能(express4.0+)
2017/06/28 NodeJs
jquery实现侧边栏左右伸缩效果的示例
2017/12/19 jQuery
Angular2学习笔记之数据绑定的示例代码
2018/01/03 Javascript
vue编译打包本地查看index文件的方法
2018/02/23 Javascript
详解easyui 切换主题皮肤
2019/04/04 Javascript
基于Taro的微信小程序模板消息-获取formId功能模块封装实践
2019/07/15 Javascript
jQuery实现轮播图效果demo
2020/01/11 jQuery
JavaScript读取本地文件常用方法流程解析
2020/10/12 Javascript
[42:00]完美世界DOTA2联赛PWL S3 Phoenix vs INK ICE 第一场 12.13
2020/12/17 DOTA
Python使用Shelve保存对象方法总结
2019/01/28 Python
django 多对多表的创建和插入代码实现
2019/09/09 Python
Python面向对象之继承原理与用法案例分析
2019/12/31 Python
python利用proxybroker构建爬虫免费IP代理池的实现
2021/02/21 Python
Lee牛仔裤澳大利亚官网:美国著名牛仔裤品牌
2017/09/02 全球购物
贝斯特韦斯特酒店集团官网:Best Western
2019/01/03 全球购物
No7 Beauty美国官网:英国国民护肤品牌
2019/10/31 全球购物
如何填写个人简历自我评价
2013/12/10 职场文书
学术会议主持词
2014/03/17 职场文书
工程售后服务承诺书
2014/05/21 职场文书
介绍信怎么写
2015/01/30 职场文书
写给纪委的违纪检讨书
2015/05/05 职场文书
初中班主任培训心得体会
2016/01/07 职场文书
浅谈python中的多态
2021/06/15 Python