1.1 魔术方法
针对属性的 __get()、__set()、__isset()、__unset() class A { public $i = '这是i'; public function __get($name){ return "你这在访问{$name}的属性"; } } /* 当属性找不到会调用__get方法 * */ $a = new A(); echo $a -> qweqwe; 针对方法的 __call()、__callStatic() class A { public $i = '这是i'; /* true 不输出,直接给返回值 * */ public function __call($name, $arguments) { return "你正在调用:{$name}方法,参数为:".var_export($arguments,true); } } /* 当属性找不到会调用__get方法 * 当方法找不到会调用__call方法(实例化方法) * 静态方法是__callStatic() * */ $a = new A(); echo $a ->fn('测试1','test_2'); __toString() Java和js中是继承,通过重写。php是魔术方法7.2 回调
call_user_func、call_user_func_array function fn($i=5,$j=2){ echo "Hello world{$i},{$j}"; } $v = 'fn'; /* 相当于js中的call * */ call_user_func($v, 3000); /* 动态调用,传入args,相当于js中的apply * */ $arg = array('test_1', 'test_2'); call_user_func_array($v,$arg);