1. ホーム
  2. php

[解決済み] PHP - オブジェクトの静的配列を定義する

2022-02-07 04:44:02

質問

PHPでクラス内のオブジェクトの静的配列を初期化することは可能ですか?例えば、以下のようなことができます。

class myclass {
    public static $blah = array("test1", "test2", "test3");
}

を実行すると

class myclass {
    public static $blah2 = array(
        &new myotherclass(),
        &new myotherclass(),
        &new myotherclass()
    );
}

ここで、myotherclass は myclass のすぐ上に定義されています。 しかし、それはエラーを投げる。それを達成する方法はありますか?

どのように解決するのですか?

いいえ。 から http://php.net/manual/en/language.oop5.static.php :

他の PHP スタティック変数と同様に、スタティックプロパティは、以下のようにのみ使用できます。 リテラルまたは定数を使用して初期化します。式は使用できません。 つまり、スタティックプロパティを整数値や配列で初期化することは可能ですが、式で初期化することはできません。 (例えば)他の変数や(例えば) 関数の戻り値、またはオブジェクトを指定します。

私なら、プロパティを初期化して null そして、アクセッサーメソッドをプライベートにして、最初に呼ばれたときにアクセッサーが本当の初期化を行うようにします。以下はその例です。

    class myclass {

        private static $blah2 = null;

        public static function blah2() {
            if (self::$blah2 == null) {
               self::$blah2 = array( new myotherclass(),
                 new myotherclass(),
                 new myotherclass());
            }
            return self::$blah2;
        }
    }

    print_r(myclass::blah2());