2017-06-27 23 views
1

考慮一下:PHP不執行任何重寫時,靜態方法

class Player { 

    public static function echoSomthing(){ 
     echo "A"; 
    } 

} 

而且

class ModifiedPlayer extends Player { 

     public static function echoSomthing(){ 
      echo "B"; 
     } 
} 

好了,我重寫我的靜態echoSomthing功能,但 「A」 仍然可以得到呼應。我究竟做錯了什麼?

+2

嘗試像這樣調用'ModifiedPlayer :: echoSomthing();' –

+0

我只得到'B'...我把這些行放在下面:$ m = new ModifiedPlayer(); $ m-> echoSomthing(); – pAsh

+1

@xFlare你可以試試這個https://eval.in/822772 –

回答

0

如在Sahil GulatipAsh以及其它評論指出,

,我們需要訪問與範圍解析操作員的靜態方法::

請執行以下代碼,並會輸出B

<?php 
class Player { 
    public static function echoSomthing() { 
     echo "A"; 
    } 
} 
class ModifiedPlayer extends Player { 
    public static function echoSomthing() { 
     echo "B"; 
    } 
} 
ModifiedPlayer::echoSomthing(); 

Demo

+0

問題是,這是針對插件的。我沒有訪問父類的權限,我只能擴展它。父類調用靜態函數。 – linux932

0
class Player { 

    public static function echoSomthing(){ 
     echo "A"; 
    } 

} 

class ModifiedPlayer extends Player { 

    public static function echoSomthing(){ 
     echo "B"; 
    } 
}  

$ob = new ModifiedPlayer();  
$ob->echoSomthing(); // B displayed here