使用变量名调用 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);
我在这里问的是一些奇怪的事情。我将 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);