我不确定我应该如何找出这个问题,所以我会展示代码并描述问题:
PHP代码:
<?php
class Foo
{
private static
$defaultSettings = array(
'bar' => new Baz() //error here
);
private
$settings;
public function __construct( $options = null )
{
$this->settings = isset( $options ) ? array_merge( self::$defaultSettings, $options ) : self::$defaultSettings;
}
}
class Baz
{
...code...
}
错误:
Parse error: syntax error, unexpected T_NEW in [filename] on line [number]
我想要做的是让Foo::$defaultSettings
包含一个对象的实例,但是在创建数组时我无法初始化该对象。
Foo
的静态初始化代码:
//self::init() would be called on the first line of __construct
private static function init()
{
static $initialized;
if ( !$initialized )
{
$initialized = true;
self::$defaultSettings['bar'] = new Baz();
}
}
我觉得应该有一个更简单的解决方法,而不是运行初始化程序。
编辑添加:
我也可以创建初始化函数public
并在类定义后立即调用它Foo::init();
,这将减少__construct
函数的开销;但是,我无法真正看到单个方法调用显着节省。
答案 0 :(得分:3)
遗憾的是,类属性无法评估或实例化任何内容。你可以做的最接近的是从构造函数中运行一些东西。