美文网首页
PHP的魔术方法

PHP的魔术方法

作者: 代码的搬运工 | 来源:发表于2019-12-01 10:39 被阅读0次

    __construct

    PHP 5 允行开发者在一个类中定义一个方法作为构造函数。具有构造函数的类会在每次创建新对象时先调用此方法,所以非常适合在使用对象之前做一些初始化工作。

    如果子类中定义了构造函数则不会隐式调用其父类的构造函数。要执行父类的构造函数,需要在子类的构造函数中调用 parent::__construct()。如果子类没有定义构造函数则会如同一个普通的类方法一样从父类继承(假如没有被定义为 private 的话)。

    __destruct

    PHP 5 引入了析构函数的概念,这类似于其它面向对象的语言,如 C++。析构函数会在到某个对象的所有引用都被删除或者当对象被显式销毁时执行。

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

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

    __call

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

    $name 参数是要调用的方法名称。$arguments 参数是一个枚举数组,包含着要传递给方法 $name 的参数。

    __callStatic

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

    $name 参数是要调用的方法名称。$arguments 参数是一个枚举数组,包含着要传递给方法 $name 的参数。

    __set

    在给不可访问属性赋值时,__set() 会被调用。参数 $name 是指要操作的变量名称。$value 参数指定了 $name 变量的值。

    __get

    读取不可访问属性的值时,__get() 会被调用。参数 $name 是指要操作的变量名称。

    __isset

    当对不可访问属性调用 isset() 或 empty() 时,__isset() 会被调用。参数 $name 是指要操作的变量名称。

    __unset

    当对不可访问属性调用 unset() 时,__unset() 会被调用。参数 $name 是指要操作的变量名称。

    __sleep

    serialize() 函数会检查类中是否存在一个魔术方法 __sleep()。如果存在,该方法会先被调用,然后才执行序列化操作。此功能可以用于清理对象,并返回一个包含对象中所有应被序列化的变量名称的数组。如果该方法未返回任何内容,则 NULL 被序列化,并产生一个 E_NOTICE 级别的错误。

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

    __wakeup

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

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

    __toString

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

    __invoke

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

    __set_state

    自 PHP 5.1.0 起当调用 var_export() 导出类时,此静态 方法会被调用。

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

    __clone

    当复制完成时,如果定义了 __clone() 方法,则新创建的对象(复制生成的对象)中的 __clone() 方法会被调用,可用于修改属性的值(如果有必要的话)。

    相关文章

      网友评论

          本文标题:PHP的魔术方法

          本文链接:https://www.haomeiwen.com/subject/njczwctx.html