1. __call
核心思想:当调用类中不存在的方法时,就会调用__call();
例子:
<?php class Test{ public function __call($method,$args){ echo $method; var_dump($args); } } $ob=new Test(); $ob->hello(1,2); ?>2.__get() 和__set()
核心思想:当访问类中不存在的成员变量时就会调用__get();当在类中设置不存在的成员变量时就会调用__set();
例子:
<?php class Test{ public $c=0; public $arr=array(); public function __set($x,$y){ echo $x . "/n"; echo $y . "/n"; $this->arr[$x]=$y; } public function __get($x){ echo "The value of $x is".$this->arr[$x]; } } $a = new Test; $a->b = 1 ;//成员变量b不存在,所以会调用__set $a->c = 2;//成员变量c存在,所以无任何输出 $d=$a->b;// 成员变量b不存在,所以会调用__get ?>3.__invoke()
核心思想:实例化对象本身是不能被调用,但是类中如果实现 __invoke() 方法,则把实例对象当作方法调用,会自动调用到 __invoke() 方法,参数顺序相同
例子:
<?php class CallableClass { public function __invoke($param1, $param2) { var_dump($param1,$param2); } } $obj = new CallableCalss; $obj(123, 456); var_dump(is_callable($obj));