php请求数据异常,难道是我火星了?记一次查看 PHP 异常栈遇到的坑

博主在排查线上项目异常信息时,发现PHP函数的参数值在异常栈中显示为浮点型,而非预期的整型。经过深入代码分析,发现异常信息可能是函数内部操作后的参数值,而非调用时的原始值。这一发现让博主对PHP的异常处理有了新的认识,并通过实验验证了这一现象。博客揭示了PHP异常栈信息的潜在特性和调试过程中的陷阱。
摘要由CSDN通过智能技术生成

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

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

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

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

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

function foo($bar)

{

$bar = 2;

throw new Exception();

}

foo(1);

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

我的猜测是,异常信息毕竟都是反推的。如果每次调用函数的时候,如果为了让异常栈信息记录函数被调用那一刻时的参数值,就得花内存空间去保存当时的参数值,的确有点浪费……我再也不敢称呼自己为 PHP 老司机了……

df83231bee01dd4e52438731a8a0385e.png

写作累,服务器还越来越贵

求分担,祝愿好人一生平安

天使打赏人

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值