在我的应用程序中,我需要许多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]);
}