首页 > 编程知识 正文

PHP魔术函数,魔术变量php

时间:2023-05-04 07:13:04 阅读:234178 作者:66

构造函数:__construct()
实例化对象时被调用。
在类中,构造函数是用来初始化对象的,利用构造函数,可以操作对象,并改变它的值。
当__construct和以类名为函数名的函数同时存在时,__construct将被调用,另一个不被调用。
当子类重写了构造函数,子类被实例化时,只调用子类的构造函数,而父类的构造函数不被调用。
析构函数:__destruct()
当删除一个对象或对象操作终止时被调用。
当该对象的所有引用都被删除,或者对象被显式销毁时执行。
克隆函数:__clone()
当对象被拷贝(克隆)时直接调用。
如$a = new Action(); $a = $object;
__set($name, $value)
用$object->a = 17的方式给属性赋值时,如果属性a存在且是public型,那么直接给属性a赋值皆可;
如果属性a不存在或者是protected/private型,就会调用__set($name, $value)方法。
二个参数:属性、属性值。
__get($name)
用$object->a的方式读取对象的属性时,如果属性a存在且是public型,那么直接返回该属性的值;
如果属性a不存在或者是protected/private修饰的不可直接访问的类型,就会调该方法并以返回值为准。
一般可以使用该方法使外部可限制性地访问内部属性,或者完成类似java中的反射操作。
__isset($name)
检测一个对象的属性是否存在时被调用。
如:isset($c->name),如果name不存在,则触发该函数。
对不存在或者不可访问的属性使用isset()或者empty()时,__isset()会被调用。
__unset($name)
销毁一个对象的属性时被调用。
如:unset($c->name),如果name不存在,则触发该函数。
当unset一个不存在或者不可访问的属性时,__unset()会被调用,否则直接unset该属性皆可。
__call($name, $arguments)
当调用不存在或者不可访问的方法时,会调用__call($name, $arguments)方法。
__callStatic($name, $arguments)
当在静态方法中调用不存在或者不可访问的方法时,会调用__callStatic($name, $arguments)方法。
这个方法 是PHP5.3里才添加的,比较新。
__toString()
当打印对象时会被直接调用。如 echo $object; 或 print $obj;
注意:这时候php会抛出一个Catchable fatal error错误;用print_r打印对象不会触发此函数。
__set_state()
用var_export()输出一个对象时,__set_state()会被调用,输出内容以该魔术方法的返回值为准。
注:var_export()和var_dump()类似,只是var_export()输出的内容符合php语法。
__autoload($name)
实例化一个对象时,如果对应的类不存在,则该方法被调用。
这个函数比较特殊,这个函数并不是作为类的成员方法使用的。
注意:该方法是全局函数,参数是类的名称。
可以用spl_autoload_register函数来定义其他的函数来代替__autoload
__sleep()
serialize之前被调用。若对象比较大,想删减一点东东再序列化,可考虑一下此函数。
__wakeup()
unserialize时被调用,做些对象的初始化工作。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。