第十一节--重载 -- Classes and Objects in PHP5 [11]

原创 2004年06月23日 02:17:00

第十一节--重载 -- Classes and Objects in PHP5 [11]


作者:Leon Atkinson 翻译:Haohappy 来源:超越PHP
 
/*
+-------------------------------------------------------------------------------+
| = 本文为Haohappy读<<Core PHP Programming>>
| = 中Classes and Objects一章的笔记
| = 翻译为主+个人心得
| = 为避免可能发生的不必要的麻烦请勿转载,谢谢
| = 欢迎批评指正,希望和所有PHP爱好者共同进步!
+-------------------------------------------------------------------------------+
*/

第十一节--重载

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");
?>

Coursera公开课笔记: 斯坦福大学机器学习第十一课“机器学习系统设计(Machine learning system design)”

Coursera公开课笔记: 斯坦福大学机器学习第十一课“机器学习系统设计(Machine learning system design)” 斯坦福大学机器学习斯...
  • GarfieldEr007
  • GarfieldEr007
  • 2015年11月16日 12:59
  • 1304

C++11(13):重载运算与类型转换

除了重载的函数调用运算符operator()之外,其他重载运算符不能含有默认实参。 当以个重载的运算符是成员函数时,this绑定到左侧运算对象。成员运算符函数的(显式)参数比运算对象的数量少一个。 ...
  • u011851778
  • u011851778
  • 2014年09月12日 11:12
  • 942

台湾大学林轩田机器学习基石课程学习笔记11 -- Linear Models for Classification

上一节课,我们介绍了Logistic Regression问题,建立cross-entropy error,并提出使用梯度下降算法gradient descnt来获得最好的logistic hypot...
  • red_stone1
  • red_stone1
  • 2017年05月17日 21:42
  • 1474

第十一节 串口通信

第十一节  串口通信     在软件开发过程中调试是一个很关键的过程,而调试用的最多的手段就是打印Log,嵌入式平台很少有显示设备,所以我们需要将信息通过串口打印到PC端。     MT254xb...
  • snyanglq
  • snyanglq
  • 2015年11月27日 14:12
  • 326

第十一节 Trait进阶

本节主要内容 trait构造顺序trait与类的比较提前定义与懒加载trait扩展类self type 1 trait构造顺序 在前一讲当中我们提到,对于不存在具体实现及字段的tra...
  • houjun1988325
  • houjun1988325
  • 2017年01月23日 15:40
  • 91

OC学习第十一节Json

============== day11 JSON ============== 什么是json? JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式...
  • super_man_ww
  • super_man_ww
  • 2015年12月22日 09:15
  • 371

js第十一节-字符串方法

js第十一节-字符串方法 一、概念介绍 var str = '前端学习-WWW.dream.com'; str.charAt(1);            // '端' str.cha...
  • chenminglvming
  • chenminglvming
  • 2016年04月08日 23:38
  • 271

C++运算符重载(11) - 重载<<和>>操作符

运算符 “>”用于流输出。 在开始重载这些操作符之前,必须注意下面的事项: 1) cout是输出类的对象,而cin是输入类的对象 2) 这些操作符必须重载为全局函数。如果想要让它们可以访问私有成员,...
  • shltsh
  • shltsh
  • 2015年05月27日 00:11
  • 762

C++ Primer Plus第六版 第十一章 编程练习答案

//第一题 //windows下\r\n在txt中是换行...被坑了= = //vector.h #ifndef VECTOR_H_ #define VECTOR_H_ #include name...
  • zhaoshu01234
  • zhaoshu01234
  • 2015年09月26日 10:54
  • 1757

第十一节 进程间通信

在linux系统中,有多个进程同时存在,进程之间需要通信,进程间通信(IPC)有以下方法:     管道     信号     消息队列     信号量     共享内存               ...
  • du_bingbing
  • du_bingbing
  • 2015年07月08日 17:18
  • 180
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:第十一节--重载 -- Classes and Objects in PHP5 [11]
举报原因:
原因补充:

(最多只允许输入30个字)