如何使用存储在变量中的类名创建新对象


How to create a new object using a class-name stored in a variable?

我有一堆依赖于变量的函数,我希望能够做这样的事情:
(它返回一个错误,因此我无法解决这个问题)

function($x) {
    fetch.$x.() // if x=Name I would like it to execute fetchName()...and so on 
}

和类似的东西

function($x) {
    $article = new 'Cc'WebBundle'Entity'$X(); 
    // if x='name' to be executed Cc'WebBundle'Entity'name()
}

当然,你可以做到:

$basename = "fetch";
$key = ...; // your logic for generating the rest of function's name
$functionName = $basename . $key;
$functionName(); // execute function

现在,棘手的部分是函数是否包含任意的参数集。在这种情况下,您应该使用call_user_func_array(文档)。

至于物体的创造,米查尔在这里解释了请明确如何实现这一点。

附言:事实上,这与Symfony2几乎没有关系。这是一个纯粹的PHP问题;)

就我个人而言,我使用方便的call_user_func_array()函数,如下所示:

<?php
$class = 'MyClassName';
$method = 'someMethod';
$parameters = array('foo', 'bar', 'baz');
call_user_func_array(array($class, $method), $parameters);

不过,我想您需要在任何名称间隔的类名中转义回斜杠,即MCB''MyClassName