2017-06-27 3 views
1

diese Bedenken Sie:PHP tut nichts, wenn eine statische Methode überschrieben

class Player { 

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

} 

Und

class ModifiedPlayer extends Player { 

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

Ok, so dass ich meine statische echoSomthing Funktion außer Kraft setzen, sondern "A" noch hallte erhalten. Was mache ich falsch?

+2

Versuchen Sie wie 'ModifiedPlayer :: echoSomthing() aufzurufen; ' –

+0

Ich bekomme nur' B '... Ich lege diese Zeile unter: $ m = new ModifiedPlayer(); $ m-> echoSomthing(); – pAsh

+1

@xFlare Sie können dies versuchen https://eval.in/822772 –

Antwort

0

Wie in den Kommentaren von Sahil Gulati angegeben und pAsh und auch andere,

wir mit Bereichsauflösungsoperator ::

Bitte führen Sie folgenden Code ein, und es wird ausgegeben B

<?php 
class Player { 
    public static function echoSomthing() { 
     echo "A"; 
    } 
} 
class ModifiedPlayer extends Player { 
    public static function echoSomthing() { 
     echo "B"; 
    } 
} 
ModifiedPlayer::echoSomthing(); 
statische Methode zugreifen müssen

Demo

+0

Problem ist, das ist für ein Plugin. Ich habe keinen Zugriff auf die Elternklasse, ich kann sie nur erweitern. und die Elternklasse ruft die statische Funktion auf. – 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