静的な子クラスが静的な親クラスを拡張している場合、self ::とparent ::を使用することの違いは何ですか?.
class Parent {
public static function foo() {
echo 'foo';
}
}
class Child extends Parent {
public static function func() {
self::foo();
}
public static function func2() {
parent::foo();
}
}
Func()とfunc2()の間に違いはありますか?もしそうなら、それは何ですか?
ありがとうございました
よろしく
Child has foo() Parent has foo()
self::foo() YES YES Child foo() is executed
parent::foo() YES YES Parent foo() is executed
self::foo() YES NO Child foo() is executed
parent::foo() YES NO ERROR
self::foo() NO YES Parent foo() is executed
parent::foo() NO YES Parent foo() is executed
self::foo() NO NO ERROR
parent::foo() NO NO ERROR
あなたがそれらの使用のための正しいケースを探しているなら。 parent
は継承されたクラスへのアクセスを許可しますが、self
は、実行中のメソッド(静的またはその他)が属するクラスへの参照です。
self
キーワードの一般的な使用法は、PHPでシングルトンパターンを使用する場合です。self
は子クラスを尊重しませんが、static
は 新しい自己と新しい静的
parent
は、継承されたクラスメソッドにアクセスする機能を提供します。これは、デフォルトの機能を保持する必要がある場合に便利です。
selfは、静的関数を呼び出し、静的変数を操作するために使用されます。静的変数は、オブジェクト固有ではなくクラス固有です。