$var = 'Foo';
$object = new {$var . 'Controller'}(); // new FooController()
是否有任何语法可以实现这一目标?上面的例子当然不起作用。
答案 0 :(得分:9)
是的,只需将完整的类名存储在变量中:
$class = $var . 'Controller';
$instance = new $class();
答案 1 :(得分:0)
不确定为什么你不想使用最简单的方法(我推荐TheifMaster&#39的方法...),我能解决这个问题的唯一方法是定义一个函数或另一个类来处理串联和类创建。这实际上是更多的工作,虽然它看起来更专业,但我必须说。
功能可能如下所示:
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');
只有使用它的原因是你有多个Controller类(FooController,BarController等)。除此之外,我总是推荐KISS方法(保持简单,愚蠢(这就是所谓的,不是针对你的))。这就是我得到的所有内容,请告诉我这是否适合您。