2012-05-27 9 views
19

PHPのクラス内のオブジェクトの静的配列を初期化できますか?あなたはPHP - オブジェクトの静的配列を定義する

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

を行うことができますが、私はmyotherclassが右MyClassの上に定義されている

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

を行うときのように。しかし、それはエラーを投げます。それを達成する方法はありますか?

+0

あなたはエラーがあることを教えてもらえますか? – xbonez

+4

コンストラクタ内に '$ blah2'を設定します。プロパティ定義では、実行時に計算された値を設定することはできません。 – Wiseguy

+0

@Wiseguyはあなたのメッセージを正しく受け取りましたか? – Brett

答えて

24

いいえ。 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()); 
1

あなたは、これらの値を持つようにそれを初期化することはできませんが、あなたは私が下記のやったように、独自の内部コレクションにそれらをプッシュする静的メソッドを呼び出すことができます。これはあなたが得るほど近いかもしれません。

class foo { 
    public $bar = "fizzbuzz"; 
} 

class myClass { 
    static public $array = array(); 
    static public function init() { 
    while (count(self::$array) < 3) 
     array_push(self::$array, new foo()); 
    } 
} 

myClass::init(); 
print_r(myClass::$array); 

デモ:http://codepad.org/InTPdUCT次の出力になり

Array 
(
    [0] => foo Object 
    (
     [bar] => fizzbuzz 
    ) 
    [1] => foo Object 
    (
     [bar] => fizzbuzz 
    ) 
    [2] => foo Object 
    (
     [bar] => fizzbuzz 
    ) 
)
関連する問題