第十一节--重载


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 开发环境配置(Zend Server安装)
Apr 28 PHP
php数据入库前清理 注意php intval与mysql的int取值范围不同
Dec 12 PHP
php 转换字符串编码 iconv与mb_convert_encoding的区别说明
Nov 10 PHP
zend optimizer在wamp的基础上安装图文教程
Oct 26 PHP
分享一个php 的异常处理程序
Jun 22 PHP
php实现scws中文分词搜索的方法
Dec 25 PHP
YII使用url组件美化管理的方法
Dec 28 PHP
深入理解PHP中的empty和isset函数
May 26 PHP
PHP实现动态创建XML文档的方法
Mar 30 PHP
PHP实现二维数组中的查找算法小结
Jun 09 PHP
PHP+Ajax简单get验证操作示例
Mar 02 PHP
PHP实现二维数组按照指定的字段进行排序算法示例
Apr 23 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实现分页工具类分享
2014/01/09 PHP
js 自定义的联动下拉框
2010/02/07 Javascript
JavaScript Event学习第九章 鼠标事件
2010/02/08 Javascript
JS基础之undefined与null的区别分析
2011/08/08 Javascript
jquery表格内容筛选实现思路及代码
2013/04/16 Javascript
分享Javascript中最常用的55个经典小技巧
2013/11/29 Javascript
js时间日期格式化封装函数
2014/12/02 Javascript
javascript实现的简单的表单验证
2015/07/10 Javascript
jquery实现超简洁的TAB选项卡效果代码
2015/08/28 Javascript
jQuery实现的网页左侧在线客服效果代码
2015/10/23 Javascript
jQuery如何解决IE输入框不能输入的问题
2016/10/08 Javascript
微信小程序手势操作之单触摸点与多触摸点
2017/03/10 Javascript
JavaScript实现简单的双色球(实例讲解)
2017/07/31 Javascript
Vue中的Vux配置指南
2017/12/08 Javascript
JavaScript生成指定范围的时间列表
2018/03/19 Javascript
React为 Vue 引入容器组件和展示组件的教程详解
2018/05/03 Javascript
Windows下安装python2.7及科学计算套装
2015/03/05 Python
Python多线程编程(四):使用Lock互斥锁
2015/04/05 Python
Python3实现从文件中读取指定行的方法
2015/05/22 Python
Python实现读取SQLServer数据并插入到MongoDB数据库的方法示例
2018/06/09 Python
Python3.5面向对象与继承图文实例详解
2019/04/24 Python
Python如何使用字符打印照片
2020/01/03 Python
Python Mock模块原理及使用方法详解
2020/07/07 Python
python3从网络摄像机解析mjpeg http流的示例
2020/11/13 Python
HTML5图片预览实例分享
2014/06/04 HTML / CSS
Coach澳大利亚官方网站:美国著名时尚奢侈品牌
2017/05/24 全球购物
Hotels.com泰国:酒店预订网站
2019/11/20 全球购物
企业行政文员岗位职责
2013/12/03 职场文书
咖啡馆创业计划书
2014/01/26 职场文书
2014全国两会大学生学习心得体会
2014/03/10 职场文书
金融专业毕业生自荐信
2014/06/26 职场文书
高一英语教学反思
2016/03/03 职场文书
在CSS中映射鼠标位置并实现通过鼠标移动控制页面元素效果(实例代码)
2021/04/22 HTML / CSS
MyBatis-Plus 批量插入数据的操作方法
2021/09/25 Java/Android
动画电影《龙珠超 超级英雄》延期上映
2022/03/20 日漫
SQLServer权限之只开启创建表权限
2022/04/12 SQL Server