3
A
回答
14
您的語句將解析爲人類,如下所示。
回聲一個連接字符串組成:
- 功能
print('3')
,這將返回true,這被字符串化到1
- 字符串的結果「2」
- 作用的結果
print('4')
,這將返回true,它被串化爲1
現在,op的順序這裏的演出真的很有趣,根本不能以43211
結束!讓我們嘗試一個變體,找出發生了什麼問題。
echo '1' . print('2') . '3' . print('4') . '5';
這就產生4523111
PHP是解析這一點,那麼,如:
echo '1' . (print('2' . '3')) . (print('4' . '5'));
賓果!左邊的print
會首先評估,打印'45'
,這讓我們
echo '1' . (print('2' . '3')) . '1';
然後向左print
得到評估,因此我們現在已經印刷'4523'
,留給我們
echo '1' . '1' . '1';
成功。 4523111
。
讓我們來分解你的古怪聲明。
echo print('3') . '2' . print('4');
這將打印'4'
第一,留給我們
echo print('3' . '2' . '1');
那麼接下來的打印語句進行評估,這意味着我們現在已經印刷'4321'
,留給我們
echo '1';
因此,43211
。
我會強烈建議不要echo
荷蘭國際集團一print
的結果,也不print
荷蘭國際集團的echo
的結果。這樣做首先是非常荒謬的。
經進一步審查,實際上,我並不完全相信PHP是如何解析要麼胡說八道的這些位。我不會再想這件事了,它傷害了我的大腦。
2
0
3
大部分的困惑都是由於圍繞參數print
的參數放置了括號。如您所知,括號對於語言結構是可選的;你可能不知道的是,他們在解析過程中被刪除。
評估順序
讓我們先刪除括號:
echo print '3' . '2' . print '4';
,並說明評價的實際順序:
echo (print ('3' . '2' . (print '4')))
^ ^ ^ ^
3 2 1--------->>----------1
在此的心臟,你會發現一個級聯字符串或字符串表示;這首先計算:
'3' . '2' . (print '4')
前兩個元件被級聯:
'32' . (print '4')
然後,(print '4')
值評價;打印其參數'4'
後,返回值print
本身始終爲int(1)
;這種鑄入一個串'1'
和級聯與其它元素:
'321'
此結束第一步。第二步通過的臨時結果到另一個print
聲明:
print '321'
像以前一樣,'321'
印現在int(1)
返回的最後一步:
echo 1
證明
你可以在查看生成的操作碼時確認此行爲(爲了清晰起見添加了輸出列):
line # * op return operands output
------------------------------------------------+-------
1 0 > CONCAT ~0 '3', '2' |
1 PRINT ~1 '4' | 4
2 CONCAT ~2 ~0, ~1 | 4
3 PRINT ~3 ~2 | 4321
4 ECHO ~3 | 43211
說明
"3"
和"2"
被連接起來 -"32"
- 並將其存儲到~0
。"4"
被打印並且返回值int(1)
被存儲到~1
中。~0
和~1
級聯 -"321"
- 並存儲到~2
。"321"
已打印,返回值存儲在~3
中。int(1)
由於字符串鑄造而被打印爲"1"
。
相關問題
- 1. 在PHP中奇怪的打印行爲?
- 2. PHP的回聲奇怪的行爲
- 3. 奇怪的行爲蟒蛇的打印
- 4. shell腳本奇怪的回聲行爲
- 5. 奇怪的回聲行爲瓦爾
- 6. 奇怪的聲明行爲?
- 7. 爲什麼p4打印返回奇怪的行尾?
- 8. SQL打印返回奇怪的結果
- 9. 如何在回聲中打印PHP行
- 10. PHP奇怪的回顯行爲
- 11. 非常奇怪的PHP回聲錯誤
- 12. 行打印之前的奇怪字符
- 13. 打印奇怪的結果
- 14. 奇怪的打印問題
- 15. 爲UDP打印的奇怪字符
- 16. 奇怪的回調行爲
- 17. 奇怪的回聲輸出
- 18. PHP SCANDIR奇怪的行爲
- 19. 奇怪的PHP行爲
- 20. PHP array_diff:奇怪的行爲
- 21. curl php奇怪的行爲
- 22. php的奇怪行爲
- 23. 奇怪的PHP行爲
- 24. PHP Array奇怪的行爲
- 25. PHP的json_decode()行爲奇怪
- 26. 奇怪的PHP行爲
- 27. PHP空()奇怪的行爲
- 28. php SimpleXMLElement奇怪的行爲
- 29. php tidy奇怪的行爲
- 30. PHP打印和回聲HTML
+1很好的答案Charles – alex 2010-07-27 02:30:55
+1我想補充一點,語言結構'print'不會像函數那樣得到評估,因此就是奇怪的順序。我幾乎可以說這個嵌套產生或多或少未定義的行爲。 – deceze 2010-07-27 02:30:56
好,我想感謝你這個非常有啓發性的答案。 – Fortisimo 2010-07-27 02:32:42