登录后台

页面导航

本文编写于 117 天前,最后修改于 117 天前,其中某些信息可能已经过时。

PHP 将所有以 __(两个下划线)开头的类方法保留为魔术方法。所以在定义类方法时,不要使用__开头的方法.

所有的魔术方法 必须 声明为 public

  • __construct (构造函数)

具有构造函数的类会在每次创建新对象时先调用此方法.
注:子类在具有构造函数时不会调用父类的构造方法.如果要使用父类构造函数则需要parent::__construct().

  • __destruct (析构函数)

具有析构函数的类会在对象被销毁前时先调用此方法.

  • 重载

当调用当前环境下未定义或不可见的类属性或方法时,重载方法会被调用.

  • 属性重载.主要包括以下几个函数 __set(),__get(),__isset(),__unset()
  1. 在给不可访问属性赋值时,__set() 会被调用。参数 $name 是指要操作的变量名称。__set() 方法的 $value 参数指定了 $name 变量的值。
  2. 读取不可访问属性的值时,__get() 会被调用。
  3. 当对不可访问属性调用 isset() 或 empty() 时,__isset() 会被调用。
  4. 当对不可访问属性调用 unset() 时,__unset() 会被调用。
  • 方法重载,主要包括以下函数
    __call() 和 __callStatic()
  1. 在对象中调用一个不可访问方法时,__call() 会被调用。
  2. 在静态上下文中调用一个不可访问方法时,__callStatic() 会被调用。

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


  • __toString()

用于一个类被当成字符串时应怎样回应。
例:

class TestClass
{
    public $foo;

    public function __construct($foo) 
    {
        $this->foo = $foo;
    }

    public function __toString() {
        return $this->foo;
    }
}

$class = new TestClass('Hello');
echo $class;

\\\Hello