-3
$var = 'Foo';
$object = new {$var . 'Controller'}(); // new FooController()

有没有任何语法可以做到这一点?上面的例子当然行不通。

4

2 回答 2

9

是的,只需将完整的类名存储在一个变量中:

$class = $var . 'Controller';
$instance = new $class();
于 2013-05-25T21:23:00.007 回答
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 方法(保持简单,愚蠢(这就是它的名称,而不是针对你))。这就是我所得到的,让我知道这是否适合你。

于 2013-05-26T03:04:20.020 回答