第十一节 重载 [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 相关文章推荐
第十三节--对象串行化
Nov 16 PHP
php 301转向实现代码
Sep 18 PHP
一个php导出oracle库的php代码
Apr 20 PHP
php中通过curl检测页面是否被百度收录
Sep 27 PHP
Discuz7.2版的faq.php SQL注入漏洞分析
Aug 06 PHP
php实现的通用图片处理类
Mar 24 PHP
PHP通过API获取手机号码归属地
May 28 PHP
了解PHP的返回引用和局部静态变量
Jun 04 PHP
PHP生成静态HTML文档实现代码
Jun 23 PHP
PHP基于curl后台远程登录正方教务系统的方法
Oct 14 PHP
PHP输出Excel PHPExcel的方法
Jul 26 PHP
layui数据表格自定义每页条数limit设置
Oct 26 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从memcache读取数据再批量写入mysql的方法
2014/12/29 PHP
PHP实现求连续子数组最大和问题2种解决方法
2017/12/26 PHP
PHP的HTTP客户端Guzzle简单使用方法分析
2019/10/30 PHP
可以支持多中格式的JS键盘
2007/05/02 Javascript
jQuery下扩展插件和拓展函数的写法(匿名函数使用的典型例子)
2010/10/20 Javascript
Jquery 在页面加载后执行的几种方式
2014/03/14 Javascript
js交换排序 冒泡排序算法(Javascript版)
2014/10/04 Javascript
使用coffeescript编写node.js项目的方法汇总
2015/08/05 Javascript
JS实现环形进度条(从0到100%)效果
2016/07/05 Javascript
JS如何设置cookie有效期为当天24点并弹出欢迎登陆界面
2016/08/04 Javascript
js实现table添加行tr、删除行tr、清空行tr的简单实例
2016/10/15 Javascript
js文件中直接alert()中文出来的是乱码的解决方法
2016/11/01 Javascript
Node.js调试技术总结分享
2017/03/12 Javascript
微信小程序 实现列表项滑动显示删除按钮的功能
2017/04/13 Javascript
微信小程序实现多宫格抽奖活动
2020/04/15 Javascript
node中使用es6/7/8(支持性与性能)
2019/03/28 Javascript
Vue数据绑定简析小结
2019/05/07 Javascript
Vue发布项目实例讲解
2019/07/17 Javascript
vue3.0实现点击切换验证码(组件)及校验
2020/11/18 Vue.js
python如何在列表、字典中筛选数据
2018/03/19 Python
python逐行读写txt文件的实例讲解
2018/04/03 Python
Flask实现跨域请求的处理方法
2018/09/27 Python
python按行读取文件并找出其中指定字符串
2019/08/08 Python
Python中turtle库的使用实例
2019/09/09 Python
Python中xml和dict格式转换的示例代码
2019/11/07 Python
Python3创建Django项目的几种方法(3种)
2020/06/03 Python
Django serializer优化类视图的实现示例
2020/07/16 Python
Python将list元素转存为CSV文件的实现
2020/11/16 Python
python解压zip包中文乱码解决方法
2020/11/27 Python
捷克建筑材料网上商店:DEK.cz
2021/03/06 全球购物
成功的酒店创业计划书
2013/12/27 职场文书
青年教师典范事迹材料
2014/01/31 职场文书
综合实践活动方案
2014/02/14 职场文书
中专毕业生的自荐书
2014/07/01 职场文书
社区关爱留守儿童活动方案
2014/08/22 职场文书
2016年小学植树节活动总结
2016/03/16 职场文书