首页 > PHP > PHP魔术方法全解析

PHP魔术方法全解析

来源:原创 作者:1 分类:PHP 阅读:905 日期:2014-05-19

万花筒儿童故事

PHP中的魔术方法为以__(两个下划线)开头的类方法。__construct(),__destruct(),__call(),__callStatic(),__get(),__set(),

__isset(),__unset(),__sleep(),__wakeup(),__toString(),__invoke(),__set_state()和 __clone()

魔术方法不同于普通类方法的地方在于:魔术方法是通过某种机制而非直接调用被执行的。如__construct()方法在类被实例化时被调用执行。

__destruct()方法在所有对象引用被销毁时,被调用执行。所以说,魔术方法如同一种回调机制,如果需要在触发某个事件时作出回应,则应在类中声明对应事件触发的魔术方法。

各魔术方法的触发机制:

1、__get(),__set()

在给不可访问属性赋值时,__set()会被调用。

读取不可访问属性的值时,__get()会被调用。

不可访问属性包括未声明属性,声明为protected,private的属性。

2、__isset(),__unset()

对不可访问属性调用isset()或empty()时,__isset()将被调用。

对不可访问属性调用unset()时,__unset()将被调用。

不可访问属性包括未声明属性,声明为protected,private的属性。

3、__call(),__callStatic()

调用对象的一个不可访问方法时,__call()将被调用。

调用类的一个不可访问的静态方法时,__callStatic()将被调用。PHP5.3.0+版本可用

不可访问方法包括未声明,或无访问权限。

public mixed __call ( string $name , array $arguments )

public static mixed __callStatic ( string $name , array $arguments )

$name为调用的方法名,$arguments为传递给方法的参数数组。

4、__construct(),__destruct()

当创建一个类的实例时,__construct()将被调用。

当销毁所有指向实例的引用时,__destruct()将被调用。

参考笔记 关于PHP的构造函数与析构函数

5、__toString()

当一个对象被当成字符串时,__toString将被调用。

如使用echo,print输出对象时,将被调用。

6、__invoke()

当尝试以调用函数的方式调用一个对象时,__invoke()将被调用。

 

热门文章 更多>

微信扫一扫,关注技术十日谈