2012-05-27 58 views
19

你能初始化PHP中的類中的對象的靜態數組嗎?就像你可以做PHP - 定義對象的靜態數組

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

但是當我做

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

其中myotherclass是正確的上述MyClass的定義。 然而,拋出一個錯誤;有沒有辦法實現它?

+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 
    ) 
)