所在的位置: php >> php发展 >> PHP魔术方法总结

PHP魔术方法总结

想要学习PHP魔术方法,必须理解什么是魔术方法。

顾名思义,与魔术变量相似,魔术方法也是PHP内置的一种函数应用。目前PHP共有十六个魔术方法,灵活应用会让你的代码迅速飞奔起来。

魔术方法都有哪些?

__construct(),__destruct(),__call(),__callStatic(),__get(),__set(),__isset(),__unset(),__sleep(),__wakup(),__serialize(),__toString(),__invoke(),__set_state(),__clone(),__debuginfo()。

以上就是PHP的所有魔术方法,有些相信大家也很眼熟哦,有些是经常使用的,有些则不太常见,既然是总结,那咱们就一一回顾一下。

魔术方法的使用规范

既然是PHP内置的物件,那么作为开发者就不能在使用这些名词定义自己的方法名了,除非你是想用某一个魔术方法的功能。

由于是PHP内置的,那么也就是公开的,不是私有的,所以所有的魔术方法声明都需要使用public。

而PHP特有的双下划线是不是也很眼熟,看起来和魔术变量__FILE__这类差不多吧,有了这个双下划线,看得出,那就是有魔术功能了。

所以在我们自己自定义魔术方法时,也最好不要使用双下划线,这样对谁都不好。

这些问题都知晓的话,那么就可以进入使用阶段了。

__construct()的使用方法

construct在英文翻译中,修建、建造的意思。在程序中,它也的确是一个构造函数。它是一个特殊函数,当有实例化new的时候,就会自动调用这个函数。

所以__construct()是一个非常重要的构造函数,人人都必不可少的要使用它。

如果想给__construct(),传递变量也是可以的。

__destruct()的使用方法

面试时__construct()经常会和__destruct()混合着来说,__construct()是构造函数,在一个类中自动调用使用,而__destruct()作用正好相反,它需要使用时必须声明,且不可以带参数,是一个析构函数。

通常可以这样记忆,__construct()辛苦构造出来的东西,被__destruct()解析掉了。为什么要解析掉呢?又回到计算机原理的底层,每一格内存都是有限的,存储需要消耗,如果一直占用不释放就会造成内存溢出,现在PHP出现了回收机制,如果你不想要,那么就销毁吧,只不过我还会再调用一遍告诉你。

__call()和__callStatic()的使用方法

__call()定义:在对象中调用一个不可访问方法时调用。顾名思义,不可访问的方法才会调用它,他有两个参数:$name,$arguments。

既然__call()有了这样特殊的属性,那么__callStatic()也不会有太不一样的区别。看他们只是多了一个static,在PHP中static表示静态,那么__callStatic()的定义呼之欲出:在调用静态方法中不可访问时调用。

__get()的使用方法

官方定义:在调取不可访问属性值的时候调用。

看图例,在类中,除了可以声明公开变量,还可以声明私有变量,私有变量是无法在外部使用的,所以当实例化之后想使用私有变量就会报错。

想解决这个问题,那么就需要__get()来执行。

__set()使用方法

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

和__get()是不是有些类似呢?一个是调取值,一个是赋值,这样就很好理解了,话不多说直接上代码。

考点:当使用__set()进行赋值运算时,__get()不会被调用。

__isset()的使用方法

大家在做开发的时候,都会使用到两个判断变量的函数比如isset()和empty(),其实这两个函数当对不可访问属性调用是就会用到__isset()这个魔术方法。

那么既然如此回顾一下isset()和empty()的定义!isset()判断变量是否被设置且不为NULL;empty()坚持变量是否为空。

两个共有变量由于设置值,所以打印为TRUE,第二个私有属性调用__isset(),未设置变量返回false,设置变量返回true。

本章先讲这么多,后面继续。




转载请注明:http://www.aierlanlan.com/tzrz/2481.html