【问题标题】:Call setter method with variable name使用变量名调用 setter 方法
【发布时间】:2015-06-08 16:08:11
【问题描述】:

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

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

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

然后我使用 json_decode() 来提取 ID 字段。我用 3 个主键创建了一个 $key => $value 表。还有我的问题,我希望在 foreach 循环中使用此表执行 $myEntity->set$KEY($VALUE) 之类的操作。

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

谢谢 ;-)

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

【问题讨论】:

    标签: symfony doctrine-orm fosrestbundle jmsserializerbundle


    【解决方案1】:

    您可以在 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);
    

    【讨论】:

    • 你是我的英雄,这很好用!感谢您,主题已关闭。
    猜你喜欢
    • 2011-05-07
    • 2022-01-11
    • 1970-01-01
    • 2019-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多