php变量静态方法


php variable variables static methods

我有这个代码:

$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();