第十一节 重载 [11]


Posted in PHP onOctober 09, 2006

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 相关文章推荐
从一个不错的留言本弄的mysql数据库操作类
Sep 02 PHP
php处理json时中文问题的解决方法
Apr 12 PHP
PHP 提取图片img标记中的任意属性的简单实例
Dec 10 PHP
PHP批量检测并去除文件BOM头代码实例
May 08 PHP
php使用mkdir创建多级目录入门例子
May 10 PHP
PHP+memcache实现消息队列案例分享
May 21 PHP
php判断两个浮点数是否相等的方法
Mar 14 PHP
关于php中一些字符串总结
May 05 PHP
php短信接口代码
May 13 PHP
php文件系统处理方法小结
May 23 PHP
PHP使用preg_split()分割特殊字符(元字符等)的方法分析
Feb 04 PHP
php框架CodeIgniter使用redis的方法分析
Apr 13 PHP
第十二节 类的自动加载 [12]
Oct 09 #PHP
第十四节 命名空间 [14]
Oct 09 #PHP
学习使用PHP数组
Oct 09 #PHP
PHP中创建并处理图象
Oct 09 #PHP
如何正确理解PHP的错误信息
Oct 09 #PHP
php+dbfile开发小型留言本
Oct 09 #PHP
用 php 编写的日历
Oct 09 #PHP
You might like
PHP循环输出指定目录下的所有文件和文件夹路径例子(简单实用)
2014/05/10 PHP
详解ThinkPHP3.2.3验证码显示、刷新、校验
2016/12/29 PHP
Jquery中对数组的操作代码
2011/08/12 Javascript
阻止事件(取消浏览器对事件的默认行为并阻止其传播)
2013/11/03 Javascript
JavaScript框架(iframe)操作总结
2014/04/16 Javascript
JavaScript中的getDay()方法使用详解
2015/06/09 Javascript
js生成随机数的过程解析
2015/11/24 Javascript
js改变透明度实现轮播图的算法
2020/08/24 Javascript
bootstrap多种样式进度条展示
2016/12/20 Javascript
Vue + Webpack + Vue-loader学习教程之相关配置篇
2017/03/14 Javascript
Node.js发送HTTP客户端请求并显示响应结果的方法示例
2017/04/12 Javascript
webpack 2.x配置reactjs基本开发环境详解
2017/08/08 Javascript
前端把html表格生成为excel表格的实例
2017/09/19 Javascript
Vue 中使用vue2-highcharts实现曲线数据展示的方法
2018/03/05 Javascript
JS实现键值对遍历json数组功能示例
2018/05/30 Javascript
Vue 中使用lodash对事件进行防抖和节流操作
2020/07/26 Javascript
在vue-cli创建的项目中使用sass操作
2020/08/10 Javascript
python实用代码片段收集贴
2015/06/03 Python
TensorFlow损失函数专题详解
2018/04/26 Python
Python全排列操作实例分析
2018/07/24 Python
Python3实现对列表按元组指定列进行排序的方法分析
2018/12/22 Python
Python3.0中普通方法、类方法和静态方法的比较
2019/05/03 Python
python 操作hive pyhs2方式
2019/12/21 Python
Python连接字符串过程详解
2020/01/06 Python
Python常用扩展插件使用教程解析
2020/11/02 Python
Python中对象的比较操作==和is区别详析
2021/02/12 Python
美国著名的品牌折扣店:Burlington
2017/06/08 全球购物
台湾东南旅游社网站:东南旅游
2019/02/11 全球购物
Weblogic和WebSphere不同特点
2012/05/09 面试题
大学生如何写自荐信
2014/01/08 职场文书
解除劳动关系协议书2篇
2014/11/28 职场文书
初中毕业生自我评价
2015/03/02 职场文书
硕士学位申请报告
2015/05/15 职场文书
如何用python清洗文件中的数据
2021/06/18 Python
你真的会用Mysql的explain吗
2022/03/31 MySQL
Java 死锁解决方案
2022/05/11 Java/Android