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
.
Mögliche Duplikate von [Call Eltern statische Methode in PHP] (http://stackoverflow.com/questions/18636171/call-parent-static-method-in-php) – FirstOne
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
@FirstOne - warum ist das "Fliegen um"? Wie kann ich das dann anrufen? – Piter