PHP 有其神奇的方法 __call
和 __callStatic
,它们允许拦截对不存在的 方法 的调用。我正在寻找一种方法来拦截对不存在的 函数 的调用(位于命名空间内的函数,而不是类型)。
可以做(PHP7)吗?
有一段时间我考虑把函数放在代理类中,但是命名空间可以跨越多个文件,如果我没记错的话,PHP没有部分类,因此这种方法没有用。
更新:每个命名空间的多个文件问题。
假设我有文件 A.php 和 B.php,它们都具有相同的命名空间,比如 Text
。考虑将所有函数都放到代理类中。现在我有文件 C.php 并且我有电话 Text\indexOf(...)
。但是我不知道这是 Text\proxyA::indexOf
还是 Text\proxyB::indexOf
,因为我拥有的所有信息都是命名空间的名称——Text
——和函数名称。因此,从来电者方面来说,我很高兴。
最佳答案
使用 PHP7+,您可以捕获对未定义函数的调用:
try {
not_exist();
} catch (\Error $e) {
echo 'ERROR: ' . $e->getMessage();
}
然后,您可以使用
set_exception_handler
来捕获它,而无需将其放在 try
/catch
块中:set_exception_handler(function($e) {
echo '<BR>ERROR: ' . $e->getMessage();
});
not_exist();
请注意,您需要使用
set_exception_handler
而不是 set_error_handler
。关于php - 是否可以拦截对不存在的函数的调用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35587468/