PHP 有其神奇的方法__call,__callStatic可以拦截对不存在方法的调用。我正在寻找一种方法来拦截对不存在函数(位于命名空间而不是类型内的函数)的调用。
可以吗(PHP7)?
有一段时间我考虑过将函数放在代理类中,但是名称空间可以跨越多个文件,如果我没有记错的话,PHP没有分部类,因此这种方法没有用。
更新:每个命名空间有多个文件问题。
假设我有文件 A.php 和 B.php,它们都具有相同的命名空间,例如Text。考虑将所有函数放入代理类中。现在我有文件 C.php 并且我有 call Text\indexOf(...)。但是我不知道这是否是Text\proxyA::indexOf因为Text\proxyB::indexOf我拥有的所有信息都是命名空间的名称 -- Text-- 和函数名称。所以从呼叫者的角度来说,我很高兴。
从 PHP7 开始,您可以捕获未定义的函数调用:
try {
idontexist();
} catch (\Error $e) {
echo $e->getMessage();
}
Run Code Online (Sandbox Code Playgroud)
没有办法以与 相同的方式使用它__call,当然除非通过自定义错误处理程序。
演示: https: //3v4l.org/j4WRB