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



考虑以下类别A:

public class A
{
//...
}

以及以下片段:

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

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

我正在尝试做一些类似于laravel突变体的事情,例如,我可以有一个名为getFooAttribute的方法,laravel将使用HasAttribute特性来处理它。

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

任何参考或想法都将不胜感激,谢谢!

您可以通过实现magic__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";
}