You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何在Exception构造参数中调用print_r无法按预期工作?

为什么第一种写法里的print_r无法正常工作?

这个问题的核心在于PHP对双引号字符串的解析规则,咱们一步步拆解来看:

第一种写法的问题

你写的第一段代码是这样的:

throw new ExcepcionApi(BAD_URL, ("Bad URL: {print_r($peticion,TRUE)}"));

PHP在解析双引号包裹的字符串时,只会自动解析变量(比如这里的$peticion会被替换成它的字符串表示Array),但对于函数调用(比如print_r(...)),哪怕你把它放在花括号里,PHP也不会执行这个函数——它只会把整个{print_r(Array,TRUE)}当成普通字符串输出,这就是你在日志里看到奇怪内容的原因。

第二种写法为什么能正常运行

再看你的第二段代码:

$errorMsg=print_r($peticion,TRUE); 
throw new ExcepcionApi(BAD_URL, ("Bad URL: $errorMsg"));

这里你先手动执行了print_r($peticion, TRUE),把数组的格式化字符串结果存到了$errorMsg变量里。之后在双引号字符串中引用这个变量时,PHP会正常解析变量并替换成对应的内容,所以日志里能显示完整的数组结构。

额外小技巧:不用临时变量的写法

如果不想用临时变量,你可以用字符串拼接的方式直接把函数结果拼到字符串里,比如:

throw new ExcepcionApi(BAD_URL, "Bad URL: " . print_r($peticion, TRUE));

这种写法会先执行print_r得到结果,再和前面的字符串拼接,同样能达到你想要的效果。

内容的提问来源于stack exchange,提问作者A. Cedano

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 13:33:16