2012-09-05 103 views
0

我有这样的代码:PHP变量变量的静态方法

$node = new Node(); 

现在,我想使“节点”对象动态
我从我的配置类得到的动态域名,这个工程:

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

但我怎么可以这样写在1线?
这doensn't工作:

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

回答

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); 
+0

但是你怎么传递参数给你的构造? –

+0

好点,我改变了它 – Ruben

+0

你可以看看ReflectionClass ::的newInstance()以及 –

-3

简单。要写出他们1线根本就没有使用换行符他们之间像这样:

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

你的先生是个天才 – Ruben

+1

我认为他想事情简单化,不是字面上堵塞所有线路在一起。 – Brad

0

如果修改实例方法,因此返回你应该能够使用该语法的对象。喜欢的东西:

public static function instance() 
{ 
    if (!self::$instance) 
     self::$instance = new new Config(); 
    return self::$instance; 
}