PHP – 从字符串数组生成函数

在我的应用程序中,我需要许多getter和setter,我的想法是从数组中生成它们,例如:

protected $methods = ['name', 'city'];

有了这两个参数,我需要生成以下方法:

public function getNameAttribute() {
  return $this->getName();
}

public function getName($lang = null) {
  return $this->getEntityValue('name', $lang);
}

对于城市,方法将是:

public function getCityAttribute() {
  return $this->getCity();
}

public function getCity($lang = null) {
  return $this->getEntityValue('city', $lang);
}

当然,我也需要生成setter(使用相同的逻辑).

正如您所看到的,我将需要一个带有< variable_name>属性的方法,并在此调用中获取< variable_name>而另一个(getName)甚至返回相同的方法(对于每个getter),只需更改’name’参数即可.

每个方法都有相同的逻辑,我想“动态”生成它们.我不知道这是否可能..

最佳答案 您可以使用
__call()来执行此操作.我不打算提供完整的实现,但你基本上想做的事情如下:

public function __call($name, $args) {
    // Match the name from the format "get<name>Attribute" and extract <name>.
    // Assert that <name> is in the $methods array.
    // Use <name> to call a function like $this->{'get' . $name}().

    // 2nd Alternative:

    // Match the name from the format "get<name>" and extract <name>.
    // Assert that <name> is in the $methods array.
    // Use <name> to call a function like $this->getEntityValue($name, $args[0]);
}
点赞