PHP常用的魔术方法讲解

PHP常见的魔术方法

  • __get 获得一个类的成员变量时调用
  • __set 设置一个类的成员变量时调用
  • __toString 类被当成字符串时的回应方法
  • __construct 类的构造函数
  • __call 在对象中调用一个不可访问方法时调用
  • __callStatic 用静态方式中调用一个不可访问方法时调用
  • __invoke 调用函数的方式调用一个对象时的回应方法

__construct:

class Object{
    function __construct()
    {
        echo 'hello world';
    }
}
    
new \IMooc\Object();
\IMooc\Object::say();

当实例化的时候会运行__construct,注意静态调用不会。

__get,__set:

  function __set($name, $value)
    {
        $this->$name = $value;
    }

    function __get($name)
    {
       return $this->$name;
    }
$obj = new \IMooc\Object();
$obj->title = 1;
var_dump($obj->title);

当获取和设置一个成员变量的时候会调用set和get方法。set方法有两个参数,第一个是设置变量名字,第二个变量的值。

__call,__callStatic:

 function __call($func, $params)
    {
        var_dump($func,$params);
        return "magic function \n";
    }

    static function __callStatic($func, $params)
    {
        var_dump($func,$params);
        return "magic function \n";
    }
$obj = new \IMooc\Object();
//__call
$obj->noFunction();
//__callStatic
\IMooc\Object::noFunction();

当调用一个不存在或者无法调用(无权限,不可访问,受保护)的方法的时候,会调用__call方法,静态调用会使用__callStatic方法。第一个是函数名称,第二个是函数参数。

__toString:

    function __toString()
    {
        return __CLASS__;
    }
$obj = new \IMooc\Object();
echo $obj;

当类被当作字符串处理的时候就会调用该方法。

__invoke:

   function __invoke($params)
    {
        var_dump($params);
        return "invoke\n";
    }
$obj = new \IMooc\Object();
$obj('hello');

当一个类被当作函数来执行的时候,就会调用invoke方法。参数为传递给对象的参数。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容