第十一节 重载 [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 相关文章推荐
初级的用php写的采集程序
Mar 16 PHP
通过php快速统计某个数据库中每张表的数据量
Sep 04 PHP
smarty基础之拼接字符串的详解
Jun 18 PHP
使用HMAC-SHA1签名方法详解
Jun 26 PHP
仿dedecms下拉分页样式修改的thinkphp分页类实例
Oct 30 PHP
php使用NumberFormatter格式化货币的方法
Mar 21 PHP
php将html转成wml的WAP标记语言实例
Jul 08 PHP
PHP 用session与gd库实现简单验证码生成与验证的类方法
Nov 15 PHP
php array_values 返回数组的值实例详解
Nov 17 PHP
PHP/HTML混写的四种方式总结
Feb 27 PHP
thinkphp5.1框架容器与依赖注入实例分析
Jul 23 PHP
PHP dirname简单使用代码实例
Nov 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
分享下页面关键字抓取www.icbase.com站点代码(带asp.net参数的)
2014/01/30 PHP
PHP is_subclass_of函数的一个BUG和解决方法
2014/06/01 PHP
PHP错误Cannot use object of type stdClass as array in错误的解决办法
2014/06/12 PHP
PHP结合Jquery和ajax实现瀑布流特效
2016/01/07 PHP
PHP中Static(静态)关键字功能与用法实例分析
2019/04/05 PHP
Nginx+php配置文件及原理解析
2020/12/09 PHP
PHP 裁剪图片
2021/03/09 PHP
ie focus bug 解决方法
2009/09/03 Javascript
js select常用操作控制代码
2010/03/16 Javascript
关于Javascript作用域链的八点总结
2013/12/06 Javascript
浅析Node.js中使用依赖注入的相关问题及解决方法
2015/06/24 Javascript
js实现input密码框提示信息的方法(附html5实现方法)
2016/01/14 Javascript
NodeJs的fs读写删除移动监听
2017/04/28 NodeJs
利用nodeJs anywhere搭建本地服务器环境的方法
2018/05/12 NodeJs
简化版的vue-router实现思路详解
2018/10/19 Javascript
vue.js多页面开发环境搭建过程
2019/04/24 Javascript
JS实现音量控制拖动
2020/01/15 Javascript
VSCode搭建React Native环境
2020/05/07 Javascript
js实现详情页放大镜效果
2020/10/28 Javascript
详解Python中最难理解的点-装饰器
2017/04/03 Python
python中利用await关键字如何等待Future对象完成详解
2017/09/07 Python
Python Numpy库常见用法入门教程
2020/01/16 Python
利用PyQt中的QThread类实现多线程
2020/02/18 Python
Python xmltodict模块安装及代码实例
2020/10/05 Python
Python paramiko使用方法代码汇总
2020/11/20 Python
施华洛世奇西班牙官网:SWAROVSKI西班牙
2019/06/06 全球购物
Groupon法国官方网站:特卖和网上购物高达-70%
2019/09/02 全球购物
工程力学专业毕业生求职信
2013/10/06 职场文书
毕业自荐书
2013/12/09 职场文书
纪委书记群众路线整改措施思想汇报
2014/10/09 职场文书
中学生打架检讨书
2014/10/13 职场文书
培训师岗位职责
2015/02/14 职场文书
一个家长教育孩子的心得体会
2016/01/15 职场文书
2016幼儿教师自荐信范文
2016/01/28 职场文书
科普 | 业余无线电知识-波段篇
2022/02/18 无线电
el-form每行显示两列底部按钮居中效果的实现
2022/08/05 HTML / CSS