PHP程序中各种魔术方法的使用

来源:互联网 发布:网络公关方案 编辑:程序博客网 时间:2024/06/04 18:31

魔术方法是PHP语言中特有的方法,使用魔术方法能够大大简化程序,提高程序的运行效率。

魔术方法的共性:

1,自动调用,只是不同的魔术方法,调用的时机不同。

2,都是以“__”开始的方法

3,所有的魔术方法,方法名都是固定的,自己不能新建魔术方法

4,如果在程序用不写魔术方法,就不存在


几种常用的魔术方法:

1,__construct()    在创建对象后第一个调用的方法

2,__destruct()      在释放对象前最后一个调用的方法

3,__set()              为私有属性赋值的时候自动调用的方法

4,__get()              获取私有属性值得时候自动调用的方法

5,__isset()           在使用isset()判断一个私有属性是否存在时自动调用的方法

6,__unset()          在使用unset()删除一个私有属性时自动调用的方法

7,__toString() 在使用echo $p;($p是一个对象)等输出一个对象的时候自动调用的方法

8,__clone() 是在克隆对象时,自动调用的方法。使用clone关键字复制一个对象,这样比直接赋值多了一个对象

9,__call() 在调用一个对象中不存在的方法时自动调用的方法

10,__sleep() 在使用serialize()函数串行化的时候自动调用魔术方法

11,__wakeup() 在使用unserialize()函数反串行化的时候自动调用魔术方法

12,__set_state()   在使用var_export()函数导出类的基本信息的时候自动调用的魔术方法

13,__autoload()    只要在这个脚本中,需要加载类的时候,就会自动调用这个方法。唯一一个写在类外面的魔术方法。



魔术方法的使用:

3,__set()

(1)在直接设置私有属性值时,自动调用的

(2)__set()可以接受两个个参数,第一个参数为直接访问私有属性的属性名称,第二个参数为需要设置的值

(3)在外面用->的方式来访问


4,__get()

(1)在直接访问私有属性值时,自动调用的

(2)__get()可以接受一个参数,参数为直接访问私有属性时的属性名称

(3)在外面用->的方式来访问


5,__isset()

(1)如果对象的属性不是私有的,可以用isset()来判断对象中的属性是否存在,但私有的不行

(2)在对象外面使用isset()方法判断私有属性是否存在时,自动调用

(3)__isset()接受一个参数,参数为判断的私有属性的名称


6,__unset()

(1)如果对象的属性不是私有的,可以用unset()来删除对象中的属性,但私有的不行

(2)在对象外面使用__unset()方法判断私有属性是否存在时,自动调用

(3)__unset()接受一个参数,参数为删除的私有属性的名称


7,__toString()

(1)是在直接使用echo printf print等输出一个对象引用时,自动调用这个方法

(2)将对象的基本信息放在__toString()方法内部,形成自字符串返回

(3)__toString()方法中,不能有参数,而且必须返回一个字符串


8,__clone()

(1)如果$p是一个对象,使用$p2=$p赋值后,这样并不是两个对象,只是一个对象的两个引用

(2)如果使用$p2= clone $p,这样就存在两个对象,可以单独操作

(3)作用和构造方法一样,是对新克隆的对象进行初始化

(4)在这个方法中$this代表的是副本,所有就可以给所有的副本成员初始化


9,__call()

(1)在调用一个对象中不存在的方法时自动调用的方法

(2)__call()可以接受两个个参数,第一个参数为调用的不存在方法的方法名,第二个参数为调用这个不存在方法的方法参数(当输入有多个参数,那就是一个数组)

(3)可以新建一个数组,里面存放多个函数名(功能相识,但方法名不同),用in_array()函数来同一处理,这样可以减少内存的使用


10,__sleep()

(1)在使用serialize()函数串行化的时候自动调用__sleep()魔术方法。

(2)作用:可以设置需要串行化的对象的属性,如果没有这个魔术方法,就将所有的属性都串行化

(3)使用:只要在这个方法中,返回一个数组,在数组中声明了哪个属性名,那个属性就被串行化;没有在这个数组中的就不被串行化。对象中的方法还是会串行化的

11,__wakeup()

(1)在使用unserialize()函数反串行化的时候自动调用__wakeup()魔术方法

(2)作用:对串行化回来的对象经行初始化,和__construst()和__clone()功能类似

(3)使用:在方法内可以修改属性的值


13,__autoload()

1__autoload()接受一个参数,为需要调用的类名

(2)在__autoload()函数里面填写类加载include过程

(3)这样要求我们在新建类和类所在文件的文件名有一定的规律,才能统一处理

(4)同一个类只会加载一次,不会重复调用








1 0