我正在尝试在PHP中实现一个catch-all异常处理程序,以便将响应的状态代码设置为异常中包含的状态(如果存在),但出于某种原因,当我通过了肯定是整数(因为我正在记录string
)到函数中,它在某种程度上变成了string
,因为如果我在函数中立即记录它的类型它现在是{{1 }}!
显然我对PHP知之甚少,因为这让我感到困惑。为什么会发生这种情况,如何阻止它发生呢?
function qpGlobalExceptionHandler($e) {
$code = intval($e->getCode());
error_log("Global exception (".$code." ".gettype($code)."): ".$e->getMessage());
$this->sendReply($code, $e->getMessage(), false);
}
在错误日志的这一点上,我看到:
全局异常(404整数):CouchDB错误:not_found(已删除)...
但在sendReply
里面,看起来像这样:
public function sendReply($responseCode,$responseText=false,$allowCaching=true) {
error_log("In sendReply. gettype(responseCode): ".gettype($responseCode));
// ...
}
在错误日志中我得到:
在sendReply中。 gettype(responseCode):string
现在我知道PHP可能很奇怪,但到底是什么?
更新:所以我意识到一个问题,那就是我从全局异常处理程序引用$this
,它不是任何类的成员。奇怪的是,调用以某种方式仍然最终进入我想调用的实际成员函数,但我猜测必须有一些奇怪的回退逻辑PHP正在做的找到“最佳匹配”函数调用,在那个逻辑中,参数最终以某种方式转换为字符串。
无论如何,我最终采取了不同的方法,这不再是一个问题。我仍然不知道发生了什么,所以如果有任何PHP专业人士可以启发我,我仍然乐于学习。