1、PHP中的魔术方法详解前言PHP中把以两个下划线_开头的方法称为魔术方法(Magic methods),这些方法在PHP中充当了举足轻重的作用。 魔术方法包括:_sleep(),执行serialize()时,先会调用这个函数_wakeup(),执行unserialize()时,先会调用这个函数_toString(),类被当成字符串时的回应方法_invoke(),调用函数的方式调用一个对象时的回应方法_set_state(),调用var_export()导出类时,此静态方法会被调用。_clone(),当对象复制完成时调用_autoload(),尝试加载未定义的类_debugInfo(),打印所需
2、调试信息范例下面让我们以实例的形式向大家讲解下这几个魔术方法时如何使用的。范例九、 _sleep(),执行serialize()时,先会调用这个函数serialize() 函数会检查类中是否存在一个魔术方法 _sleep()。如果存在,则该方法会优先被调用,然后才执行序列化操作。此功能可以用于清理对象,并返回一个包含对象中所有应被序列化的变量名称的数组。如果该方法未返回任何内容,则 NULL 被序列化,并产生一个 E_NOTICE 级别的错误。注意:_sleep() 不能返回父类的私有成员的名字。这样做会产生一个 E_NOTICE 级别的错误。可以用 Serializable 接口来替代。作用
3、:_sleep() 方法常用于提交未提交的数据,或类似的清理操作。同时,如果有一些很大的对象,但不需要全部保存,这个功能就很好用。具体请参考如下代码:1 2 3 4 5 6 7 8 class?Person? ? public?$sex;? ?private?$name;? ?private?$age; ? ?public?function?_construct($name=,?$age=25,?$sex=男)?$this-name?=?$name;?$this-age?=?$age;?$this-sex?=?$sex;?/*?*?param?$content?*?*?return?bool?
4、*/?public?function?_isset($content)?echo?当在类外部使用isset()函数测定私有成员$content时,自动调用;?echo?isset($this-$content);?$person?=?new?Person(小明,?25);?/?初始赋值?echo?isset($person-sex),;?echo?isset($person-name),;?echo?isset($person-age),; 代码运行结果:当在类外部使用serialize()时会调用这里的_sleep()方法O:6:Person:2:s:4:name;s:8:5bCP5piO;s:3:age;i:25;十、 _wakeup(),执行unserialize()时,先会调用这个函数如果说 _sleep() 是白的,那么 _wakeup() 就是黑的了。那么为什么呢?因为:与之相反,unserialize() 会检查是否存在一个 _wakeup() 方法。如果存在,则会先调用 _wakeup 方法,预先准备对象需要的资源。作用:_wakeup() 经常用在反序列化操作中,例如重新建立数据库连接,或执行其它初始化操作。还是看代码:1 2 3 4 5 6 7 8 class?Person? ? ?public?$sex;? ?private?$name;? ?pr
《PHP中的魔术方法详解.doc》由会员分享,可在线阅读,更多相关《PHP中的魔术方法详解.doc(26页范文模板文档)》请在优智文库上查找。