Symfony 使用 eval 执行实体方法

Symfony execute an entity method using eval

我正在尝试 运行 使用基于字符串的方法的实体方法。但这似乎不起作用并出现以下错误:

Notice: Undefined property: AppBundle\Entity\User::$setName

在控制器中

$user = $this->getDoctrine()->getRepository("AppBundle:User")->find(1);
$value = "Peter";
$method = "setName(".$value.")";

eval($user->$method);

/**Tried this also but same error **/
$user->{$method}

我怎样才能使这个工作?

首先,您必须将 $method 变量更改为一个简单的 function/method 名称,然后您可以像上一行一样对其求值

$user = $this->getDoctrine()->getRepository("AppBundle:User")->find(1);
$value = "Peter";
// Just the method name
$method = "setName";
// This is a valid evaluation passing a variable
$user->{$method}($value);

Jack Skeletron 的答案更接近您的尝试,但您也可以使用 call_user_func_array 函数来完成:

$user = $this->getDoctrine()->getRepository("AppBundle:User")->find(1);

$method = 'setName';
$value = 'Peter';

call_user_func_array(array($user, $method), array($value));

http://php.net/manual/en/function.call-user-func-array.php