记录下PHP中的魔术方法

作者: 乘风御上者 分类: PHP 发布时间: 2020-05-08 21:11

PHP中的魔术方法:程序在特定事件中自动调用的类方法(前提条件是类中定义了相应的魔术方法)。

__autoload()

首先说明下,该函数不叫魔术方法。当程序尝试加载未定义的类时自动调用该函数。
该函数已经不被推荐使用,建议使用spl_autoload_register()函数。

__construct()

名称构造方法,每当类创建新对象时会先调用该方法。 值得注意的是必须是创建新对象时才会触发(使用new关键字)。

__destruct()

名称析构方法,与构造方法对应。当某个对象所有引用都被删除或者当对象显示的的销毁时执行。

__call() / __callStatic()

当调用某个对象的方法不存在(或者不可访问)时会自动触发这两个方法中的一个。 那这两个函数有什么区别呢?

  1. 在类内部调用一个不存在的方法时,只会触发__call方法。
  2. 在类外部调用一个不可访问的方法时,静态方式调用的则触发__callStatic方法,反之则调用__call方法。
    因为PHP没有重载概念,所以要实现相似功能可以通过该特性完成。

__get()

当读取对象不可访问的属性时,该方法被调用。

__set()

当给对象不可访问的属性赋值时,该方法被调用。

__isset()

当对对象的不可访问属性调用isset或empty函数时,该方法将被调用。

__unset()

当对对象的不可访问属性调用unset函数时,该方法将被调用。

__sleep()

当对象被序列化时(使用serialize),该方法将被调用。

__wakeup()

当序列化的对象被反序列化时(使用unserialize),该方法将被调用。

__toString()

当对象被当作字符串对待时(echo、print等),该方法将被调用。

__invoke()

当尝试以调用函数的方式调用一个对象时,该方法将被调用。

__set_state()

当使用函数var_export()函数导出类时,该方法将被调用。

__clone()

当使用clone关键字克隆对象时,该方法将被调用。

__debugInfo()

当对象被var_dump()函数调用时,该方法将被调用。

如果觉得我的文章对您有用,请随意赞赏。您的支持将鼓励我继续创作!

发表回复