你可以用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 :(得分:26)
不。来自http://php.net/manual/en/language.oop5.static.php:
与任何其他PHP静态变量一样,静态属性可能只是 使用文字或常量初始化;表达式是不允许的。 因此,您可以将静态属性初始化为整数或数组 (例如),你可能不会将它初始化为另一个变量,也就是a 函数返回值,或对象。
我会将属性初始化为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 :(得分:3)
虽然你无法初始化它以获得这些值,但你可以调用静态方法将它们推送到自己的内部集合中,正如我在下面所做的那样。这可能会尽可能接近。
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 ) )