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方法。参数为传递给对象的参数。
网友评论