通常面向对象语言的重载技术

摘要:通常面向对象语言的重载技术,其基本语法是这样的:在一个类中,有多个同名的方法,每个方法的参数不同而已。这种现象就称为“重载”

通常面向对象语言的重载技术,其基本语法是这样的:在一个类中,有多个同名的方法,每个方法的参数不同而已。这种现象就称为“重载”。

参数不同可以是:数量个数不同,或类型不同,或顺序不同。比如:

class  A{
int  function  f1(int  x){......}
int  function  f1(int  x,  int  y){.....}
int  function  f1(string s   int  m){....}
}

但,在php中,一个类中,根本就不可以定义多个同名方法——这直接是语法错误。实际上,php中的重载,是另一个“概念”,其指的是:

属性重载: 如果使用一个不存在的属性,就会去自动调用类中预先定义好的某个方法以处理数据;
方法重载: 如果使用一个不存在的方法,就会去自动调用类中预先定义好的某个方法以处理该行为


属性重载

属性有哪些使用情形?其实跟变量一样,只有4种使用情形:

取值:$v1 = 对象->属性;
赋值:对象->属性 = XX值;
判断是否存在:isset(对象->属性;)
销毁:unset(对象->属性;)

所谓属性重载,就是在面对上述4种情形的属性使用场景中,该对象如果来“应对”的问题。如果某属性不存在,但在语法中使用如下情形,则会发生:

取值:$v1 = 对象->属性;               ===>自动调用类中的__get()方法
赋值:对象->属性 = XX值;           ===>自动调用类中的__set()方法
判断是否存在:isset(对象->属性;)     ===>自动调用类中的__isset()方法
销毁:unset(对象->属性;)                  ===>自动调用类中的__unset()方法

前提都是:类中要预先定义好这些方法。


方法重载

当使用一个对象调用一个不存在的普通方法的时候,会自动去调用预先定义好的"__call"方法。

当使用一个对象(类)调用一个不存在的静态方法的时候,会自动去调用预先定义好的"__callStatic"方法。

其中,该方法必须带2个参数。其实跟前面一样!

上面所学的几个方法都被称为“魔术方法”:

__get(), __set(),  __isset(), __unset(),  __call(),  __callstatic();


本文内容仅供个人学习、研究或参考使用,不构成任何形式的决策建议、专业指导或法律依据。未经授权,禁止任何单位或个人以商业售卖、虚假宣传、侵权传播等非学习研究目的使用本文内容。如需分享或转载,请保留原文来源信息,不得篡改、删减内容或侵犯相关权益。感谢您的理解与支持!

链接: https://shenqiku.cn/article/FLY_3418