在一个声明中结合回声和打印

Mic*_*iel 5 php syntax

echo "1" . (print '2') + 3; 返回214.脚本如何以*14结束?

Gor*_*don 14

当你这样做

echo "1" . (print '2') + 3;
Run Code Online (Sandbox Code Playgroud)

PHP会做(演示)

line     # *  op                           fetch          ext  return  operands
---------------------------------------------------------------------------------
   2     0  >   PRINT                                            ~0      '2'
         1      CONCAT                                           ~1      '1', ~0
         2      ADD                                              ~2      ~1, 3
         3      ECHO                                                     ~2
         4    > RETURN                                                   1
Run Code Online (Sandbox Code Playgroud)

用语言:

  • 打印2,返回1
  • concat"1",返回1 =>"11"
  • 添加"11"+ 3 => 14
  • 回声14

这是214.

运算符+ - .具有相同的运算符优先级,但是是左关联的:

对于具有相同优先级的运算符,左结合意味着评估从左到右进行,右结合意味着相反.


编辑:因为所有其他答案声称PHP做1 + 3,这里进一步证明它没有:

echo "1" . (print '2') + 9;
Run Code Online (Sandbox Code Playgroud)

得到220,例如11 + 9而不是1 . (1+9).如果添加优先于连接,那么它将是2110,但为此你必须写

echo "1" . ((print '2') + 9);
Run Code Online (Sandbox Code Playgroud)