2013-05-25 69 views
-3
$var = 'Foo'; 
$object = new {$var . 'Controller'}(); // new FooController() 

是否有使这成为可能的任何语法?上面的例子当然不起作用。级联变量,类对象

回答

9

是的,只是存储类的全名中的变量:

$class = $var . 'Controller'; 
$instance = new $class(); 
+0

我的意思是除此之外的任何语法。 – user2252786

+3

为什么你想要一个不同于正确的语法? ;) – ThiefMaster

+0

我定义为一个参数是$ var了,我想在一行中创建对象,而无需创建扩展的类名称的另一个变量:U – user2252786

0

不知道为什么你不希望使用可用的最简单的方法(我建议TheifMaster的方法...)时,只有其他方法我可以弄清楚是定义一个函数或另一个类来处理连接和类的创建。这实际上是更多的工作,但我必须说,看起来更专业。

函数可能看起来像:

function createObject($prefix, $type) 
{ 
    $objectName = $prefix . $type; 

    return new $objectName(); 
} 

,并调用它是这样的:

$var = 'Foo'; 
$object = createObject($var, 'Controller'); 

或者干脆:

$object = createObject('Foo', 'Controller'); 


或定义的类创建对象,事情如:

class objectHandler 
{ 
    public function createObject($prefix, $type) 
    { 
     $objectName = $prefix . $type; 

     return new $objectName(); 
    } 
} 

现在,每当你想用它来创建一个新的对象,你只需要调用:

$var = 'Foo'; 
$object = objectHandler::createObject($var, 'Controller'); 

或者干脆:

$object = objectHandler::createObject('Foo', 'Controller'); 

唯一的理由使用这个是,如果你有多个控制器类(FooController,BarController等)。除此之外,我总是推荐KISS方法(保持简单,愚蠢(这就是所谓的,而不是针对你))。这就是我得到的,让我知道如果这对你有用。