昨天的内容,就有朋友问
先解释一下,PHP的魔术方法都因此__开头的,以是大家在定义方法名称时,只管即便不要利用__开头,除非你的目的便是为了重载现有的魔术方法。只管即便避免引起歧义。
老规矩,本日先说一下PHP魔术方法有哪些,以及都有什么浸染,来日诰日上代码,实例演示。
PHP中的魔术方法总结 :__construct, __destruct , __call, __callStatic,__get, __set, __isset, __unset , __sleep, __wakeup, __toString, __set_state, __clone , __autoload

__get( $property ) 当调用一个未定义的属性时访问此方法
2、__set__set( $property, $value ) 给一个未定义的属性赋值时会自动触发这一个方法
3、__isset__isset( $property ) 当在一个未定义的属性上调用isset()函数时会自动触发这一个方法
4、__unset__unset( $property ) 当在一个未定义的属性上调用unset()函数时会自动触发这一个方法
5、__call__call( $method, $arg_array ) 为了避免当调用的方法不存在时产生缺点,可以利用 __call() 方法来避免。该方法在调用的方法不存在时会自动调用,程序仍会连续实行下去。
该方法有两个参数,第一个参数 $function_name 会自动吸收不存在的方法名,第二个 $args 则以数组的办法吸收不存在方法的多个参数。
这里的未定义的方法包括没有权限访问的方法,这个魔术方法是很常用的,尤其是在框架之中,,很多地方都是通过__call方法实现一种调用关系的。大家有兴趣可以找一个框架看下源代码。
6、__autoload__autoload 函数,它会在试图利用尚未被定义的类时自动调用。通过调用此函数,脚本引擎在 PHP 出错失落败前有了末了一个机会加载所需的类。
其余,__autoload方法供应一种“lazy load”的机制,当第一次须要利用干系类时调用,这样就不会加载不必要的类。
把稳: 在 __autoload 函数中抛出的非常不能被 catch 语句块捕获并导致致命缺点。
7、__construct__construct 布局方法,当一个工具创建时自动调用此方法。PHP在类内部实现一个和类同名的函数,也是布局函数,那么两者差异是什么?
利用__construct方法的好处是:在修正类名的时候,不须要关注布局函数名称的修正,避免了,类名修正,而布局函数名称为修正的问题。
8、__destruct__destruct 析构方法,PHP将在工具被销毁前(即从内存中打消前)调用这个方法。如果学过c++或者其他面向工具措辞的朋友,该当对这个更随意马虎理解一些。
9、__clone在多数情形下,我们并不须要完备复制一个工具来得到个中属性。但有一个情形下确实须要:如果你有一个 GTK 窗口工具,该工具持有窗口干系的资源。你可能会想复制一个新的窗口,保持所有属性与原来的窗口相同,但必须是一个新的工具(由于如果不是新的工具,那么一个窗口中的改变就会影响到另一个窗口)。还有一种情形:如果工具 A 中保存着工具 B 的引用,当你复制工具 A 时,你想个中利用的工具不再是工具 B 而是 B 的一个副本,那么你必须得到工具 A 的一个副本。
工具复制可以通过 clone 关键字来完成(如果可能,这将调用工具的 __clone() 方法)。工具中的 __clone() 方法不能被直接调用。
10、__toString当我们调试程序时,须要知道是否得出精确的数据。比如打印一个工具时,看看这个工具都有哪些属性,其值是什么,如果类定义了toString方法,就能在测试时,echo打印工具体,工具就会自动调用它所属类定义的toString方法,格式化输出这个工具所包含的数据。如果类没有实现此方法,则无法通过echo打印工具,否则会显示:Catchable fatal error: Object of class test could not be converted to string in
此方法必须返回一个字符串
11、__sleep串行化的时候用。serialize() 检讨类中是否有魔术名称 __sleep 的函数。如果这样,该函数将在任何序列化之前运行。它可以打消工具并该当返回一个包含有该工具中应被序列化的所有变量名的数组。
12、__wakeup反串行化的时候调用,unserialize() 检讨具有魔术名称 __wakeup 的函数的存在。如果存在,此函数可以重修工具可能具有的任何资源。利用 __wakeup 的目的是重修在序列化中可能丢失的任何数据库连接以及处理其它重新初始化的任务。
13、__set_state当调用var_export()时,这个静态 方法会被调用(自PHP 5.1.0起有效)。
本方法的唯一参数是一个数组,个中包含按array(’property’ => value, …)格式排列的类属性。
14、__invoke当考试测验以调用函数的办法调用一个工具时,__invoke 方法会被自动调用。方法虽然有供应,但是
以上是本文内容,感激大家。