第十一节--重载


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图片处理:加水印、缩略图的实现(自定义函数:watermark、thumbnail)
Dec 02 PHP
php设计模式 Delegation(委托模式)
Jun 26 PHP
php中一个完整表单处理实现代码
Nov 10 PHP
PHP实现变色验证码实例
Jan 06 PHP
百度地图API应用之获取用户的具体位置
Jun 10 PHP
Thinkphp模板中截取字符串函数简介
Jun 17 PHP
smarty简单入门实例
Nov 28 PHP
thinkPHP实现瀑布流的方法
Nov 29 PHP
详解Yii2 定制表单输入字段的标签和样式
Jan 04 PHP
PHP实现移除数组中为空或为某值元素的方法
Jan 07 PHP
PHP实现批量删除(封装)
Apr 28 PHP
一次因composer错误使用引发的问题与解决
Mar 06 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
基于文本的访客签到簿
2006/10/09 PHP
Php连接及读取和写入mysql数据库的常用代码
2014/08/11 PHP
PHP使用Mysqli类库实现完美分页效果的方法
2016/04/07 PHP
Yii2框架数据库简单的增删改查语法小结
2016/08/31 PHP
yii2多图上传组件的使用教程
2018/05/10 PHP
PHP中使用CURL发送get/post请求上传图片批处理功能
2018/10/15 PHP
在Ubuntu 18.04上安装PHP 7.3 7.2和7.0的方法
2019/04/09 PHP
jMessageBox 基于jQuery的窗口插件
2009/12/09 Javascript
JQuery入门——事件切换之hover()方法应用介绍
2013/02/05 Javascript
弹出最简单的模式化遮罩层的js代码
2013/12/04 Javascript
从零学JSON之JSON数据结构
2014/05/19 Javascript
javascript模拟map输出与去除重复项的方法
2015/02/09 Javascript
javascript页面倒计时实例
2015/07/25 Javascript
thinkphp实现无限分类(使用递归)
2015/12/19 Javascript
JavaScript设计模式初探
2016/01/07 Javascript
jQuery中get方法用法分析
2016/12/07 Javascript
js实现符合国情的日期插件详解
2017/01/19 Javascript
node操作mysql数据库实例详解
2017/03/17 Javascript
AngularJS动态菜单操作指令
2017/04/25 Javascript
nodejs 图片预览和上传的示例代码
2017/09/30 NodeJs
JavaScript通过mouseover()实现图片变大效果的示例
2017/12/20 Javascript
微信小程序录音与播放录音功能
2017/12/25 Javascript
es6函数之尾调用优化实例分析
2020/04/25 Javascript
Python网络爬虫与信息提取(实例讲解)
2017/08/29 Python
不同版本中Python matplotlib.pyplot.draw()界面绘制异常问题的解决
2017/09/24 Python
Django Aggregation聚合使用方法解析
2019/08/01 Python
Python3基本输入与输出操作实例分析
2020/02/14 Python
Feelunique澳大利亚:欧洲的化妆品零售电商
2019/12/18 全球购物
环境科学专业研究生求职信
2013/10/02 职场文书
国际贸易专业个人求职信范文分享
2013/12/14 职场文书
如何写一份好的英文求职信
2014/03/19 职场文书
乡镇三项教育实施方案
2014/03/30 职场文书
巾帼文明岗申报材料
2014/05/01 职场文书
关键在于落实心得体会
2014/09/03 职场文书
起诉意见书范文
2015/05/19 职场文书
教你部署vue项目到docker
2022/04/05 Vue.js