php类中的一些魔术方法

这段时间一直在看ThinkPHP的源码,对于thinkphp的一些设计思路还是非常欣赏的,但是从源码里面也看出了自己的不足。因为TP是完全面向对象的,所有很多时候涉及到一些对类的操作,比如对静态成员的访问,以及抽象类的使用。那么有时候就需要用到一些魔术方法了,以前对于这些一直不是很了解,今天特地找个时间对他们一一记录下。

分别是__construct,__destruct,__call,__callStatic,__get,__set,__isset,__unset,__sleep,

__wakeup,__tostring,__invoke,__clone,__set_state。

当然,主要是记录其中的一部分,而不是全不,因为貌似有些魔术方法用到的地方不多,比如__set_state,以及__wakeup等等。

__construct就是类的构造函数了,也叫做初始化函数,当类被实例化的实话,这个函数会被执行。相应的函数就是__destruct,叫做析构函数,也就是说在类使用完后会自动执行的一个函数,一般用于关闭一些消耗大的东西,或者清理一些垃圾。特别是__construct函数,基本上很多地方都用得到,我自己写的类,除了控制器没用到以外,基本上都用到了。

__call是php5新增的一个对象方法,主要的作用是监视对象中的其他方法,如果你的对象访问一个该对象中不存在的方法时,__call方法就会被自动调用。

而__get和__set也是对应的,都是用于操作静态属性的,一般来说,对象的静态属性是不能更改或者获取,只能被类本身所使用的,但是__get和__set可以帮你实现。__set是用设置一个你不能访问的类属性,而__get是用来获取一个你不能获取的类属性。

__isset是当isset()和empty()的参数是一个为被定义的属性的时候被调用,这是官方的解释,也是一个根据事件自动触发的一个魔术方法。而__unset是党unset()函数的参数是一个未被定义的属性的时候被调用。__isset和__unset都是根据对应的函数被调用的。

其他的东西就不解释了。还有一点要值得注意的时候就是,在定义类的方法的时候,一般是不能用这些魔术方法命名的,只有你定义的方法和它们有相关,那么才能够背这样命名。

参考:http://www.baozi.in/2010/10/php-class-some-magic-functions/

 

About 智足者富

http://chenpeng.info

发表评论

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>