我有这个代码:
$node = new Node();
现在我想使"Node"对象动态
我从我的配置类中获得动态名称,这很有效:
$var = Config::instance('modules/activities/config')->get('className');
$node = new $var();
但是我怎么能把它写在一行里呢
这不起作用:
$node = new Config::instance('modules/activities/config')->get('className')();
这是PHP 5.4 的一个新语言功能
已添加实例化时的类成员访问权限,例如(new Foo)->bar()
请参阅http://docs.php.net/manual/en/migration54.new-features.php
如果修改实例方法使其返回对象,则应该能够使用该语法。类似于:
public static function instance()
{
if (!self::$instance)
self::$instance = new new Config();
return self::$instance;
}
我的同事帮了我的忙,我在助手类中做了一个静态函数:
public static function factory($name = '', $var = NULL)
{
$object = new $name((isset($var)) ? $var : '');
return $object;
}
现在这是我的代码(看起来可能有点乱):
$node = Helper::factory(Config::instance('modules/activities/config')->get('className'), $var);
简单。要把它们写在一行中,就不要像这样在它们之间使用换行符:
$var = Config::instance('modules/activities/config')->get('className');$node = new $var();