在PHP5魔术方法的详细解释

从PHP 5以后的版本,在PHP中的类可以使用魔法的方法。两规定下划线(__)在一开始的方法是保留给神奇的方法,建议您不要在__开始最好的函数名称,除非是有魔力的方法超载。

1、__get,__set
这两种方法是为类中未声明的属性及其父类设计的。
的__get(美元财产)调用一个未定义的属性时,此方法将引发,传输参数的访问属性名称。
的__set(美元财产价值)一个未定义的属性赋值,这个方法将被触发,参数传递的属性名称和值设置。
这里没有声明包含了访问控制和保护财产,私人(即物业没有权限访问)当使用对象调用。

2、__isset,__unset
的__isset(美元财产)当一个未定义的属性调用isset()方法调用的函数。
的__unset(美元财产)当一个未定义的属性称为unset()方法调用的函数。
同为__get法和__set方法,没有申报,包括访问控制保护和私有属性(即没有权限访问属性)对象时,调用。

3、__call
__call($方法,arg_array美元)时调用此方法称为未定义的方法。
方法不在此定义不包括访问;如果方法不存在这种方法找到的父类,如果父母没有给__call()方法,如果类不在__call存在(__call)在父类中找方法(方法)。

4、__autoload
的__autoload功能,将自动调用当试图使用一个类没有定义。通过调用这个函数,脚本引擎已在PHP无法加载所需的类的最后机会。
如果一个全局自动加载类来定义,这spl_autoload_register()方法必须使用登记处理类的PHP标准库:
复制代码代码如下所示:
< PHP
类装载器
{
静态函数autoload_class($ class_name){
/ /找到正确class_name美元类和引进,不引发异常
}
}

*设置对象的自动加载
* spl_autoload_register -登记了__autoload()功能实现
* /
spl_autoload_register(阵列('loader ',' autoload_class);
新的测试();实例化是不需要自动加载的,而且许多框架都用这种方法自动加载类。

注:抛出的异常在__autoload函数不能用catch语句块捕获并导致一个致命的错误,所以应该抓住在函数本身。

5、__construct,__destruct
的__construct施工方法,这种方法被称为一个对象被创建时,PHP4相对于该算法的优点是:可以使一个名字的施工方法是唯一的,不管它是什么类的名字。所以你在名称的改变上,就没有必要改变施工方法了。
的__destruct析构函数,PHP将在对象销毁(即从内存中移除,在调用此方法之前)。默认情况下,PHP只是释放由对象属性占用和破坏的对象相关的资源。析构函数允许您在使用一个对象后执行任何代码来清除内存。当PHP决定您的脚本不再与对象相关时,析构函数将被调用。
在函数的命名空间中,这发生在函数返回的时候。对于全局变量,这发生在脚本的结尾。如果要显式地销毁对象,可以将任何其他值赋给指向该对象的变量。通常,变量赋值为空或不。

6、__clone
在PHP 5中的对象分配是参考分配使用,如果你想复制一个对象,你需要使用克隆的方法,这种方法是在调用对象会自动调用__clone方法如果复制对象魔术,需要执行一些初始化的操作,可以在__clone方法实现。

7、__tostring
的__tostring方法是当一个对象被自动转换成一个字符串,例如当一个回声是用来打印对象。
如果类没有实现这个方法,它不能打印对象通过回声,否则它会显示:开捕致命错误:类的测试对象不能没有,该方法必须返回一个字符串。
在PHP 5.2.0,的__tostring方法只能生效时,它是结合回波使用()或打印()。在PHP 5.2.0,它可以在任何环境下有效的字符串(例如printf(),使用%s改性剂),但它不能用于非字符串的环境,如%d修饰符。从PHP 5.2.0,如果未定义的__tostring方法对象转换为字符串,一个e_recoverable_error错误将报告。

8、__sleep,__wakeup
当__sleep序列化
我们称__wakeup反序列化时。
serialize()检查类有一个神奇的名字__sleep.if函数,函数将运行在任何序列化。它可以清除对象,应该返回一个数组包含所有变量的名称要序列化的对象。
使用__sleep的目的是关闭的对象可能有数据库连接,在等待提交的数据,或做类似的清除任务。此外,如果有一个非常大的对象,不必完全存储也是有用的功能。
与此相反,序列化()检查一个函数的存在性与神奇的名字__wakeup.if有一个功能,这个功能可以重建任何资源,可能有物体,使用__wakeup的目的是重建,可能会失去在序列化和处理其他任何数据库连接初始化任务。

9、__set_state
当var_export()被调用,这种静态的方法被称为(有效期从PHP 5.1.0)。
这个方法的唯一参数是一个数组,其中包含阵列(财产= >价值,…)格式的类属性。

10、__invoke(有效期为PHP 5.3.0)
当试图调用的方式,调用一个函数对象,该__invoke方法称为自动。

11、__callstatic(有效期为PHP 5.3.0)
这在某种程度上类似于__call作品()魔术的方法,和__callstatic()是用来处理静态方法的调用。
PHP并加强对__callstatic定义()方法;它必须是公共的,必须声明为静态的。同样,在__call魔法()方法必须定义为public,和所有其他神奇的方法必须相同