奇怪的回声,PHP中的打印行为?

For*_*imo 3 php printing echo

以下代码输出43211,为什么?

  echo print('3').'2'.print('4');
Run Code Online (Sandbox Code Playgroud)

Cha*_*les 14

您的陈述如下解析人类.

回显由以下组成的串联字符串:

  1. 函数的结果print('3')将返回true,并将其字符串化1
  2. 字符串'2'
  3. 函数的结果print('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如何解析这些废话.我不会再考虑它了,它伤害了我的大脑.

  • 几乎是正确的 - 印刷是一种语言结构.语言忽略括号.打印(3).'2'; 与印刷品3相同.'2'; (2认同)