2016-07-12 14 views
0

Ich kann es nicht schaffen, eine statische Funktion (mit einer Konstante) von einer erweiterten Klasse zu nennen. Hier ist mein Code:php - Aufruf der statischen Funktion von einer erweiterten Klasse

(1st file) 
class A 
{       
    function isXSet() 
    { 
     return X; 
    }   
    public static function setX() 
    { 
     define('X', 1); 
    } 
} 

(second file) 

include('/*first file*/'); 
class B extends A 
{   
    A::setX();   
} 

Wie kann ich das schaffen?

+1

Mögliche Duplikate von [Call Eltern statische Methode in PHP] (http://stackoverflow.com/questions/18636171/call-parent-static-method-in-php) – FirstOne

+1

Es sollte funktionieren, wenn Sie es von irgendwo anrufen. Wenn du dir das mal ansiehst, "A :: setX();" ist einfach "herumfliegen" (es ist nicht in einer Methode) ... – FirstOne

+0

@FirstOne - warum ist das "Fliegen um"? Wie kann ich das dann anrufen? – Piter

Antwort

1

Ihr Code hier

class B extends A 
{   
    A::setX();   
} 

ist ein wenig aus. Sie haben Ihren Anruf nicht in eine Methode eingegeben.

class B extends A 
{ 
    public static function doSomething() {  
     A::setX(); 
    } 
} 

Dies geschieht eigentlich nicht durch die Eltern/Kind-Beziehung. Nachdem Sie class A definiert haben, kann der Aufruf an A::setX() überall stattfinden, da es öffentlich und statisch ist. Dieser Code ist genauso gültig:

class A 
{ 
    function isXSet() 
    { 
     return X; 
    } 
    public static function setX() 
    { 
     define('X', 1); 
    } 
} 

class B { // No extending! 
    function isXSet() { 
     return A::isXSet(); 
    } 
} 

Was sind Sie eher auf der Suche nach parent ist statt:

class A 
{ 
    public function isXSet() 
    { 
     return X; 
    } 

    protected static function setX() 
    { 
     define('X', 1); 
    } 
} 

class B extends A 
{ 
    public static function doSomething() {  
     parent::setX(); 
     var_dump(parent::isXSet()); // int(1) 
    } 
} 

Ein großes Plus ist hier, dass erstreckt Klassen geschützt Methoden zugreifen und Objekte die parent Klasse. Dies bedeutet, dass Sie alle anderen davon abhalten können, A::setX() anzurufen, es sei denn, der Angerufene war eine Instanz oder ein Kind von A.

+0

Ich denke, ich sollte Sie wissen lassen, was ich tun möchte - ich möchte konstant von einer Klasse B setzen, und dann in Klasse A einchecken, wenn Konstante X gesetzt ist (dann tu etw) - wie kann ich TU das ? – Piter

Verwandte Themen