在PHP类中,为我们提供了一些魔术方法,每个魔术方法的命名开始于两个下横杠“__”,并会在特定的条件下,由PHP自动调用。根据不同的作用,魔术方法将分为以下三类:
构造和析构函数:
__construct(), __destruct()
重载:
__call(), __get(), __set(), __isset(), __unset()
(其中__isset(), __unset() 是PHP 5.1.0开始新增的)
其它:
__sleep(), __wakeup(), __toString(), __set_state(), __clone()
先介绍“重载”。
__get:当你试图获取一个非public的属性值时,__get将被自动调用。
__set:当你试图设置一个非public的属性值时,__set将被自动调用。
__isset:当你试图设置一个非public的属性值时,__set将被自动调用。
__unset:当你试图设置一个非public的属性值时,__set将被自动调用。
__call:当你试图调用一个未定义的方法时,__call将被自动调用。这里的“未定义的方法”包括没有权限访问的方法,例如私用方 法。
注意:
所有的Overloading方法必须不能声明为static型;
在PHP 5.0.X中,所有的Overloading方法必须定义为public类型。
__get(), __set(), __isset(), __unset()
由于申明为 private, protected 的属性只能在类的内部访问,所以PHP为我们提供了两个魔术方法:__get(), __set(),使得我们可以在类外部访问私有属性。当一个私有属性在类外部被访问时,PHP 会自动调用这几个魔术方法,从而可以对类的私有属性实现获取、设置、验证、销毁等操作。
这两个方法不是默认就有的,而是需要我们在类义类时,显式地定义这两个方法。
具体实现方法见下面例子: