拦截动态函数调用(如laravel HasAttribute特征)

时间:2017-11-04 13:25:08

标签: php laravel laravel-5 php-7.1

考虑以下课程A

public class A
{
  //...
}

以及以下代码段:

$a = new A();
$value = $a->getFooValue();

正如您所看到getFooValue上没有定义A,我想截取函数 key (在此cas foo中)然后处理它有一些自定义逻辑。

我正在尝试执行与laravel mutators类似的操作,例如我可以使用名为getFooAttribute的方法,Laravel将使用 HasAttribute 特征来处理它

例如,如果我调用getFooAttribute laravel将处理它,并了解foo然后将执行一些检查以查找是否存在属性或mutator。

非常感谢任何参考或想法,谢谢!

1 个答案:

答案 0 :(得分:2)

您可以通过实施神奇的 __ call()方法拦截对对象未定义方法的调用 - 有关详细信息,请参阅http://php.net/manual/en/language.oop5.overloading.php#object.call

文档示例:

public function __call($name, $arguments)
{
    echo "Calling object method '$name' " . implode(', ', $arguments). "\n";
}