// demo1.php <?php class test { public function run() { static::who(); test::who(); self::who(); $this->who(); } public static function __callStatic($a,$b) { var_dump('a static call'); } public function __call($a,$b) { var_dump('a call'); } } $obj = new test(); $obj->run(); ?> //output string(6) "a call" string(6) "a call" string(6) "a call" string(6) "a call" //demo2.php <?php class test { public static function run() { static::who(); test::who(); self::who(); } public static function __callStatic($a,$b) { var_dump('a static call'); } public function __call($a,$b) { var_dump('a call'); } } $obj = new test(); $obj::run(); ?> //output string(13) "a static call" string(13) "a static call" string(13) "a static call"
这个实例主要说明调用方法的不一样 ,__call,__callStatic方法的执行不一样.php
第一个中, 若是用$obj->run() 的方法调用,那么在 run 方法内使用this是没有问题的, 而此时的静态方法调用是否被替换为this方法调用, 猜测是这样的, 具体以要看源码.函数
在第二个实例中, 使用静态方法调用, 则直接会使用__callStatic, 说明static 调用方法, 对函数内部的要求更严格一点,this
该问题是否可使用程序在内存空间中的访问方法来解释呢.code