难道是我火星了?记一次查看 PHP 异常栈遇到的坑

难道是我火星了?记一次查看 PHP 异常栈遇到的坑

Chris Yue No Comment
Posts

今天收到几个线上项目的异常信息警报。大家都知道 PHP 的异常信息,会把相关的函数/方法调用全部都列出来,如果函数参数不是对象,还会将参数的值也显示出来。

但我发现日志里某个方法被调用的时候,参数的形式跟我之前预想的不一样,本来应该是整型参数,日志显示的却是浮点型的。毕竟相关的业务是跟钱相关的,当时的我慌得一匹。反复看了代码无数遍,此参数由另外一个函数返回,但这个函数规定只能返回整型的变量,怎么看都不可能返回一个浮点数。

难道是我年纪大了老眼昏花?但日志怎么看这参数还是浮点型的,我便开始怀疑起人生了……

看函数调用的部分怎么着都不像有问题,我只能去函数的实现里再探索探索,发现有一行代码,参数被一个数除了之后,结果又被赋予回了这个参数。难道……PHP 异常栈里显示的参数值并不是调用函数那一刻的值?!虽然我已经不幼小,但我的心灵还是被震惊了……

要验证想法倒是也简单,立马写下了以下代码:

果然……错误日志里显示的 foo 方法的参数居然是 2 而不是 1……

想想也是,异常信息毕竟都是反推的,如果每次调用函数的时候,如果为了让异常栈信息记录函数被调用那一刻时的参数值,那不是还得花点空间去保存当时的参数值,的确有点浪费……

最后,我的感受是,连这都不知道,我再也不敢称呼自己为 PHP 老司机了……

难道是我火星了?记一次查看 PHP 异常栈遇到的坑 by Chris Yue is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License.

微信赞赏码

文章可赞,扫码赏饭!
天使投赏人

发表评论

5 + = 8