2012-02-09 45 views

回答

12

當你

echo "1" . (print '2') + 3; 

PHP會做(demo

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 

在口頭上:

  • 打印2,返回1
  • CONCAT「1 「返回1 =>」11「
  • 加 「11」 + 3 => 14
  • 回聲14

,這就是214

+ - .具有相等Operator Precedence的運營商,但左結合:

對於運營商左結合意味着評價從左向右進行,右結合意味着相反。


編輯:因爲所有其他的答案權利要求PHP確實1 + 3,這裏進一步證明,它不:

echo "1" . (print '2') + 9; 

給出220,例如11 + 9而不是1 . (1+9)。如果除了優先於串聯,這本來是2110,但是對於你不得不寫

echo "1" . ((print '2') + 9); 
+0

謝謝!酷概述順便說一句。你從哪裏得到這個? – Michiel 2012-02-09 15:46:08

+0

@Michiel點擊演示鏈接。輸出在底部。 – Gordon 2012-02-09 15:48:34

+0

Ho好,所以連接有優先權(它是第一個? – FMaz008 2012-02-09 16:43:58

0

print執行首先是因爲括號的,所以打印的2第一,but it returns 1。然後,你的回聲得到執行,打印1。然後你將它連接到print(它是1)的結果並添加3。這是4

0

print總是根據返回1:http://php.net/manual/en/function.print.php

如此,是因爲算術運算符的優先級在一個進行連結,讓您得到:

"1" . (1+3)

...這是 「14」)。並且因爲print直接發送字符串以輸出,所以您在所有內容前都會得到'2'。

1

中間的1實際上是一條true聲明。 因爲print聲明實際上返回true。 所以,你得到2(從打印),1(從回聲打印)和4(1 + 3)

2
echo "1" . (print '2') + 3; 

你需要考慮它的邏輯順序,什麼第一反應。

在我們可以回顯任何東西之前, - 「1」。 (打印'2')+ 3 - 我們需要評估它來解決它。

首先我們在紙上寫下1作爲計算的第一部分。

Scrap paper: 1 
Answer Sheet: 

我們計算出「打印‘2’」,這是一個功能數字2寫入我們的答案紙的紙張,並返回1,這是我們寫在我們的廢品一張紙上。

Scrap paper: 1 . 1 +3 
Answer Sheet: 2 

在此之後,我們希望將下一部分連接到最後,由於「。」

Scrap paper: 11 + 3 
Answer Sheet: 2 

現在我們把它一起

Scrap paper: 11 + 3 
Scrap paper: 14 
Answer Sheet: 2 

然後我們我們的廢鋼數據迴應了我們的答卷

答卷:214

echo "1" . (print '2') + 3; 

1. 
Code--: echo "1" . (print '2') + 3; 
Result: 
2. 
Code--: echo "1" . 1 + 3; 
Result: 2 
3. 
Code--: echo 11 + 3; 
Result: 2 
4. 
Code--: echo 14; 
Result: 2 
5. 
Code--: 
Result: 214 

我希望這是一些感覺,並記住打印的返回總是1,以及在另一個exe內部打印或回顯的任何函數cution將在它的調用者/父母之前回顯/打印。