使用变量名调用 setter 方法

Call setter method with variable name

我在这里问的是一些奇怪的事情。我将 Symfony2 与 Doctrine2 一起使用。为了绕过 FOSRestBundle 和 JMSBundle(不喜欢复合主键)之间的问题,我需要知道是否有可能——以及如何——从字段名称中调用 setter。

举个例子:假设我的 Product 实体有一个由 3 个字段组成的主键。 诀窍是将这种 JSON 的数组发送到我的 API REST:

{
  "id": {
    "field1": "xxx",
    "field2": "...",
    "field3": "..."
  },
  // other fields
}

然后我使用 json_decode() 来提取 ID 字段。我用 3 个主键创建了一个 table of $key => $value。这是我的问题,对于这个 table 我想在 foreach 循环中做类似 $myEntity->set$KEY($VALUE).

的事情

我这样做是因为我想在我的所有实体中重复使用这段代码。 我知道这真的很奇怪,总结起来只有我想调用的对象的名称 field/property 是合适的 setter().

谢谢 ;-)

PS:对不起,如果我的英语不完美,这不是我的母语。

您可以在 PHP 中使用动态方法名称:

$myEntity->{'set'.$KEY}($VALUE);

或更易读的版本:

$method = 'set'.$KEY;
$myEntity->$method($VALUE);

别忘了检查方法是否存在:

$method = 'set'.$KEY;
if (!method_exists($myEntity, $method))
  throw new \Exception('Something bad');
$myEntity->$method($VALUE);