<?php echo '1'.print(3)+2

2014-12-05 22:09:13 +08:00
 feilengcui008
输出结果及解释
2195 次点击
所在节点    问与答
6 条回复
heimonsy
2014-12-05 22:21:07 +08:00
会解析成
echo '1' . print 3 + 2

参考php手册: http://php.net/manual/zh/function.print.php
print 实际上不是一个函数(它是一个语言结构),因此你可以不必使用圆括号来括起它的参数列表
Paranoid
2014-12-05 22:52:16 +08:00
这种就是抖机灵

会用在工程中么?
leiliang
2014-12-05 22:59:19 +08:00
要看php引擎是怎么编译的以及对数据类型怎么转换的,这种东西,不深入到底层还真是说不清楚
vibbow
2014-12-06 00:05:05 +08:00
运行结果居然是511?!
gDD
2014-12-06 00:18:27 +08:00
参考 @heimonsy 的链接,里面有这个一句:But since the parenthesis around the argument are not required, they are interpretet as part of the argument.

也就是说,在这里[echo '1'.print(3)+2],print 后面的都被作为了 print 的参数,所以会被解析成

echo '1' . (print 3 + 2)

首先 print 部分被执行了,输出5
由于print永远会返回1,这个1与字符串‘1’相加(.),成为了字符串‘11’
这个字符串‘11‘被echo出来

就是 @vibbow 的结果,显示为’511‘。
yinxingren
2014-12-06 01:15:52 +08:00
上次在回帖中看到@Sunyanzi 发了这道题,遂放本地调试了下学习。
输出确是511
int print(3+2) 这里打印5后还返回了1 .连接了echo的1和返回的1

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/151848

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX