web-dev-qa-db-ja.com

PHP:自己::対親::拡張付き

静的な子クラスが静的な親クラスを拡張している場合、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()の間に違いはありますか?もしそうなら、それは何ですか?

ありがとうございました

よろしく

20
djkprojects
                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は、継承されたクラスメソッドにアクセスする機能を提供します。これは、デフォルトの機能を保持する必要がある場合に便利です。

33
Mark Baker

selfは、静的関数を呼び出し、静的変数を操作するために使用されます。静的変数は、オブジェクト固有ではなくクラス固有です。

1
Naresh Walia