以下代码输出43211,为什么?
echo print('3').'2'.print('4');
Run Code Online (Sandbox Code Playgroud)
Cha*_*les 14
您的陈述如下解析人类.
回显由以下组成的串联字符串:
print('3')将返回true,并将其字符串化1print('4')将返回true,并将其字符串化1现在,这里的操作顺序真的很有趣,根本无法结束43211!让我们尝试一个变体来弄清楚出了什么问题.
echo '1' . print('2') . '3' . print('4') . '5';
Run Code Online (Sandbox Code Playgroud)
这产生了 4523111
PHP正在解析它,因为:
echo '1' . (print('2' . '3')) . (print('4' . '5'));
Run Code Online (Sandbox Code Playgroud)
答对了!在print左边得到评估第一,印刷'45',这给我们留下
echo '1' . (print('2' . '3')) . '1';
Run Code Online (Sandbox Code Playgroud)
然后左边print得到评估,所以我们现在打印'4523',留下我们
echo '1' . '1' . '1';
Run Code Online (Sandbox Code Playgroud)
成功. 4523111.
让我们打破你对古怪的陈述.
echo print('3') . '2' . print('4');
Run Code Online (Sandbox Code Playgroud)
这将打印出'4'第一个,留给我们
echo print('3' . '2' . '1');
Run Code Online (Sandbox Code Playgroud)
然后评估下一个打印语句,这意味着我们现在打印'4321',留下我们
echo '1';
Run Code Online (Sandbox Code Playgroud)
因此,43211.
我强烈建议不要echo结果print,也不要print结果echo.这样做是非常荒谬的.
经过进一步审查,我实际上并不完全确定PHP如何解析这些废话.我不会再考虑它了,它伤害了我的大脑.
| 归档时间: |
|
| 查看次数: |
1948 次 |
| 最近记录: |