0

我有这个代码:

$node = new Node();

现在我想让“节点”对象动态
我从我的配置类中获取动态名称,这有效:

$var = Config::instance('modules/activities/config')->get('className');
$node = new $var();

但是我怎么能在 1 行中写这个呢?
这不起作用:

$node = new Config::instance('modules/activities/config')->get('className')();
4

4 回答 4

1

这是 PHP 5.4 的新语言特性

添加了对实例化的类成员访问,例如 (new Foo)->bar()

请参阅http://docs.php.net/manual/en/migration54.new-features.php

于 2012-09-05T13:54:40.223 回答
0

我的同事帮助了我,我在我的助手类中做了一个静态函数:

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);
于 2012-09-05T13:52:48.207 回答
0

如果您修改实例方法使其返回对象,您应该能够使用该语法。就像是 :

public static function instance()
{
    if (!self::$instance)
        self::$instance = new new Config();
    return self::$instance;
}
于 2012-09-05T13:56:28.257 回答
-3

简单的。要将它们写在 1 行中,请不要在它们之间使用换行符,如下所示:

$var = Config::instance('modules/activities/config')->get('className');$node = new $var();
于 2012-09-05T13:48:13.793 回答