PHP中常用的三种魔术方法:
第一类魔术方法:__get
和__set
方法
-
__get
方法:protected $array = array(); function __set($name, $value) { echo __METHOD__; $this->array[$name] = $value; }
当我们在设置这个类的属性的时候,如果没有这个属性的话,就会进行自动设置:
$obj->title = "hello";
-
__set
方法:function __get($name) { echo __METHOD__; return $this->array[$name]; }
当我们在调用这个类的属性的时候,如果没有这个属性,则会在上述的
$array
数组中自动查找,如果有的话就会自动调出。echo $obj->title;
第二类魔术方法:___call
和___callStatic
方法:
-
__call
方法:function __call($name, $arguments) { var_dump($name,$arguments); return "magic function"; }
当我们调用这个类中未定义的方法的时候,则会自动调用该魔术方法:
echo $obj->test('Hellow',123);
-
__callStatic
方法:static function __callStatic($name, $arguments) { var_dump($name,$arguments); return "static magic function"; }
这个魔术方法和__call方法类似,但是只有必须是静态方法
staitc
的时候,才会调用:echo Object::test('Hellow1',123);
第三类魔术方法:__toString
方法和__invoke
方法:
-
__toString
方法:function __toString() { return __CLASS__; }
-
__invoke
方法:function __invoke($param) { var_dump($param); return 'invoke'; }
该魔术方法相当于将一个对象当成函数来执行:
echo $obj('test1');