2017-05-17 12 views
0

私は、単一の基本クラスを継承する多くのPHPクラスを用意しています。この基本クラスは静的メソッドを提供します。methodA()を各クラスでオーバーライドすることができますが、実際にはあまりオーバーライドされません。各クラスには静的変数がありますが、それはnameとは異なりますが、nameに基づいて異なるクラスごとにmethodA()を実行する必要があります。私はオブジェクト指向のPHPを初めて使っているので、これを行うにはどうすればよいか正確にはわかりません。PHPで継承された静的メソッドのクラスからプロパティへのアクセス

Javaでは、基本クラスのプロパティを作成し、それをコンストラクタメソッドで定義して、super()経由で呼び出すことにしましたが、静的データに基づいてこれを行う方法がわかりません。正しい軌道にいるのですか?これを達成する最良の方法は何でしょうか?

+1

http://php.net/manual/en/language.oop5.late-static-bindings.php –

+0

FYI:コードがarou静的な呼び出しであり、OOPではありません。あなたが持っているのは、名前空間のグローバル(変数と関数)だけです。 –

+0

@AlexBlex例を使ってそのコメントを回答に記入すると、私は喜んで同意します。 –

答えて

0

この回答は@AlexBlexのおかげです。

PHPには、この動作を可能にするLate Static Bindingsという機能があります。

PHP 5.3.0以降では、静的継承のコンテキストで呼び出されるクラスを参照するために使用できるlate static bindingsという機能が実装されています。質問に提供される例で

、これを行う方法は、次のような次のようになります。

class Base { 
    public static function methodA() { 
     return static::$name; 
    } 
} 

class A extends Base { 
    public static $name = "Apple"; 
} 

class B extends Base { 
    public static $name = "Box"; 
} 

あなたはその後、期待される結果とのような関数を呼び出すことができます。

echo(A::methodA()); // "Apple" 
echo(B::methodA()); // "Box" 

この例はPHP 7で動作します。

関連する問題