// 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