PHP变量神秘地从整数变为字符串

时间:2017-05-19 19:40:18

标签: php exception-handling

我正在尝试在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专业人士可以启发我,我仍然乐于学习。

0 个答案:

没有答案