PHP魔术方法

  • 构造函数

__construct 构造还是 具有构造函数的类在每次创建新对象时先调用此方法,适合做一些初始化工作。

如果 PHP 5 在类中找不到 __construct() 函数并且也没有从父类继承一个的话,它就会尝试寻找旧式的构造函数,也就是和类同名的函数,也就是说会 __construct 比类同名的函数 优先级高自 PHP 5.3.3 起,在命名空间中,与类名同名的方法不再作为构造函数。这一改变不影响不在命名空间中的类。

__construct() 被与父类 __construct() 具有不同参数的方法覆盖时,PHP 不会产生一个 E_STRICT (编码标准化警告) 错误信息。

__destruct 析构函数 会在某个对象的所有引用都被删除或者当对象显示销毁时执行。

和构造函数一样,父类的析构函数不会被引擎暗中调用。要执行父类的析构函数,必须在子类的析构函数体中显式调用 parent::__destruct() 。此外也和构造函数一样,子类如果自己没有定义析构函数则会继承父类的。

析构函数即使在使用 exit() 终止脚本运行时也会被调用。在析构函数中调用 exit() 将会中止其余关闭操作的运行。

  • 方法重载

__call 在对象中调用一个不可访问方法时,__call() 会被调用。

__callStatic 用静态方式中调用一个不可访问方法时,__callStatic() 会被调用。

 

  • 属性重载

__get()__set()__isset()__unset() 进行属性重载

在给不可访问属性赋值时,__set() 会被调用。

读取不可访问属性的值时,__get() 会被调用。

当对不可访问属性调用 isset()empty() 时,__isset() 会被调用。

当对不可访问属性调用 unset() 时,__unset() 会被调用

属性重载只能在对象中进行。在静态方法中,这些魔术方法将不会被调用。所以这些方法都不能被 声明为 static。从 PHP 5.3.0 起, 将这些魔术方法定义为 static 会产生一个警告。

 

  • __sleep () 和 __wakeup ()

 

__sleep() 方法常用于提交未提交的数据,或类似的清理操作。同时,如果有一些很大的对象,但不需要全部保存,这个功能就很好用。

与之相反, unserialize() 会检查是否存在一个 __wakeup() 方法。如果存在,则会先调用 __wakeup 方法,预先准备对象需要的资源。

__wakeup() 经常用在反序列化操作中,例如重新建立数据库连接,或执行其它初始化操作。

Note:

__sleep() 不能返回父类的私有成员的名字。这样做会产生一个 E_NOTICE 级别的错误。可以用 Serializable 接口来替代。

  • __toString

法用于一个类被当成字符串时应怎样回应。例如 echo $obj; 应该显示些什么。此方法必须返回一个字符串,否则将发出一条 E_RECOVERABLE_ERROR 级别的致命错误。

 

  • __invoke

当尝试以调用函数的方式调用一个对象时,__invoke() 方法会被自动调用。

Note:

本特性只在 PHP 5.3.0 及以上版本有效。

  • _set_state

static object __set_state ( array $properties )

本方法的唯一参数是一个数组,其中包含按 array('property' => value, ...) 格式排列的类属性。

调用 var_expotr() 导出类时,此静态方法会被调用

  • __debugInfo

在转储对象以获取应显示的属性时,var_dump()调用此方法。如果没有在对象上定义方法,那么将显示所有公共、受保护和私有属性。

posted @ 2021-03-09 09:10  这该死的代码  阅读(94)  评论(0)    收藏  举报