关于PHP中print函数在条件语句返回值的疑问
关于PHP中print在条件语句里的返回值问题
咱们先把这个问题拆解开来看,你提到的困惑其实核心是对PHP里print的返回值,以及不同比较方式的理解差异:
1. 先明确print的真实返回值
在PHP中,print是一个语言结构(不是传统意义上的函数,虽然可以加括号调用),它的特性是:
- 会输出你传入的字符串内容
- 执行后固定返回整数1,不是布尔值
true
2. 为什么有人说它“总是返回true”?
这是混淆了「布尔上下文的自动类型转换」和「严格比较」的概念:
当你直接把print的结果放在if条件里(比如if(print('x'))),PHP会自动把返回的整数1转换为布尔值——在PHP的规则里,非零整数都会被判定为true,这时候条件会成立。很多人把这种布尔上下文里的表现,简化成了“print返回true”,但这其实是不准确的。
3. 分析你给出的例子
看这段代码:
if (print('x') === 'y') echo 'true';
执行顺序是这样的:
- 先执行
print('x'),输出字符串x,同时返回整数1 - 接着进行严格比较
1 === 'y':严格比较===要求值和类型完全匹配,整数1和字符串'y'类型不同,所以这个比较的结果是false - 因为条件为false,所以后面的
echo 'true';不会执行
也就是说,这段代码只会输出x,不会输出true,和你查阅资料得到的结论一致。
如果想要验证的话,你可以试试把比较改成松散比较==:1 == 'y'的结果也是false(因为字符串'y'转换为整数是0),依然不会输出true;只有当你比较的是print('x') === 1或者print('x') == true时,条件才会成立。
内容的提问来源于stack exchange,提问作者Joni dep
相关产品推荐
相关产品推荐

