您的位置:首页 > 编程语言 > PHP开发

init,__construct区别以及PHP魔术方法大汇总

2016-09-09 10:59 411 查看
init()是框架设置为初始化函数,当然框架内部还是用的___construct()内置函数;如果你是框架开发者,你当然也可以把初始化函数写成__init(),begin(),start()等

PS:php内部的几个魔术方法
PHP把所有以__(两个下划线)开头的类方法当成魔术方法

1)__construct()

这样的方法是构造函数,适合在使用对象前做一些初始化工作(注意:在5.3.3之后的版本与类名相同的方法不在是作为构造函数),注意在子类需要使用父类构造函数需要显示调用parent::__construct()

2)__destruct()

与构造函数对应的是这个函数,这个是析构函数,对象的所有引用都被删除或者当前对象被显示销毁才执行

如果需要调用父类析构函数也需要显式调用parent::__destruct()。注意这个析构函数即使调用exit()函数也会执行

3)__call()

如果调用了当前环境下未定义(包含没有权限访问的)和不可见属性或者方法,这个方法会调用本类__call,如果没有的话就会调用父类的__call方法

4)__callStatic()

5.3.0新增方法,主要用于静态方法中,同样的,这个方法必须使用public修饰

5)__get()

读取未定义变量会调用该方法

6)__set()

5.1.0之后增加,未定义变量赋值会调用该方法

7)__isset()

当对未定义变量调用isset()或者empty()时调用该方法

8)__unset()

对未定义变量调用unset(),该魔术方法才会生效

9)__sleep()

serialize() 检查类中是否有魔术名称__sleep 的函数。如果这样,该函数将在任何序列化之前运行。它可以清除对象并应该返回一个包含有该对象中应被序列化的所有变量名的数组。使用__sleep 的目的是关闭对象可能具有的任何数据库连接,提交等待中的数据或进行类似的清除任务。此外,如果有非常大的对象而并不需要完全储存下来时此函数也很有用。

10)__wakeup()

unserialize() 检查具有魔术名称 __wakeup 的函数的存在。如果存在,此函数可以重建对象可能具有的任何资源。使用 __wakeup 的目的是重建在序列化中可能丢失的任何数据库连接以及处理其它重新初始化的任务。

11)__toString()

__toString方法在将一个对象转化成字符串时自动调用

PHP 5.2.0之前,__toString方法只有结合使用echo() 或 print()时 才能生效。PHP 5.2.0之后,则可以在任何字符串环境生效(例如通过printf(),使用%s修饰符),但
不能用于非字符串环境(如使用%d修饰符)。从PHP 5.2.0,如果将一个未定义__toString方法的对象 转换为字符串,会报出一个E_RECOVERABLE_ERROR错误

12)__invoke()

当尝试以调用函数的方式调用一个对象时,__invoke() 方法会被自动调用,注意只能在5.3.0以后才能使用

13)__set_state()

当调用 var_export()时,这个静态 方法会被调用(自PHP 5.1.0起有效)。

14)__clone()

当复制完成时, 如果定义了__clone()方法, 则新创建的对象(复制生成的对象)中的__clone()方法会被调用, 可用于修改属性的值(如果有必要的话)。因为php对象赋值使用的引用传递,新对象会更改原对象的属性和方法

转至:http://blog.phpfs.com/archives/1119.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: