ここにコードを
class B extends A
{
A::setX();
}
は少しオフになっています。あなたはメソッドの中にあなたの呼び出しを入れなかった。
class B extends A
{
public static function doSomething() {
A::setX();
}
}
これは実際には親子関係によって何もしていません。実際には、class A
を定義した後、A::setX()
への呼び出しは、パブリックで静的なのでどこでも発生する可能性があります。このコードは、同じように有効です。あなたがより多くの可能性を探しているのは何
class A
{
function isXSet()
{
return X;
}
public static function setX()
{
define('X', 1);
}
}
class B { // No extending!
function isXSet() {
return A::isXSet();
}
}
ではなくparent
です:ここ
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)
}
}
大きなプラスは、拡張クラスから保護メソッドやプロパティにアクセスすることができるということですparent
クラス。つまり、相手がA
のインスタンスまたは子でない限り、他の人がA::setX()
に電話できないようにすることができます。
[親の静的メソッドをPHPで呼び出す]の可能な複製(http://stackoverflow.com/questions/18636171/call-parent-static-method-in-php) – FirstOne
どこかから呼び出すとうまくいくはずです。あなたが見てみると、 'A :: setX();はちょうど「飛び回って」(メソッドの中にはない)... – FirstOne
@FirstOne - なぜこの「飛行aroun」ですか?どうすればそれを呼び出すことができますか? – Piter