静的クラスプロパティとしてのインスタンス

PHPでクラスのインスタンスをプロパティとして宣言することは可能ですか?

基本的に私が達成したいことは次のとおりです:

abstract class ClassA() 
{
  static $property = new ClassB();
}

まあ、私はそれを行うことはできませんが、常にこのような何かの横にある回避策はあります:

if (!isset(ClassA::$property)) ClassA::$property = new ClassB();
7
前に何回も質問されています。 プロパティをランタイムに依存する情報で初期化することはできません。 Ctorでインスタンスを設定します。ゲッターで怠惰にロードしてください。
追加された 著者 Gordon,
@Pauliusでctorの静的プロパティを設定することもできますので、 "but"の理由は表示されません。
追加された 著者 Gordon,
追加された 著者 Hannes,
はい、私はコンストラクタでそれを設定することができますが、私の場合、私は静的にクラスが必要です。しかし、努力をありがとう:)
追加された 著者 paudam,

2 答え

実装のようなシングルトンを使うことができます:

<?php
class ClassA {

    private static $instance;

    public static function getInstance() {

        if (!isset(self::$instance)) {
            self::$instance = new ClassB();
        }

        return self::$instance;
    }
}
?>

次のようにインスタンスを参照できます。

ClassA::getInstance()->someClassBMethod();
18
追加された
私はむしろそれをgetInstanceと呼ぶのではなく、むしろgetB()と呼んでいます。
追加された 著者 Gordon,

代わりの解決策、静的なコンストラクタは、

<?php
abstract class ClassA {
    static $property;
    public static function init() {
        self::$property = new ClassB();
    }
} ClassA::init();
?>

これが動作するには、クラスが抽象クラスである必要はありません。

静的変数を初期化する方法https://stackoverflow.com/a/3313137/118153

4
追加された
PHP - 日本のコミュニティ [ja]
PHP - 日本のコミュニティ [ja]
4 参加者の

このグループではPHPについて話します。 パートナー:kotaeta.com