2014-04-02 112 views
-1

考慮:'42'從哪裏來?

php > echo '1 + 5' * '42 + 1' . "\n"; 
42 

我期待某種錯誤或警告,但PHP讓我們乘串毫無怨言。但是,爲什麼它會顯示第二個字符串中的第一個整數?

一些例子,對此我能找到的結果背後沒有真正的合乎邏輯的理由:

php > echo '1 hi' * '42 + 1' . "\n"; 
42 
php > echo 'hi' * '42 + 1' . "\n"; 
0 
php > echo '1 + 5' * '42 + hi' . "\n"; 
42 
php > echo '1 + 5' * '42 hi' . "\n"; 
42 
php > echo '1 + 5' * '42hi' . "\n"; 
42 
+1

** 8 **?我不知道你在說什麼8? –

+0

http://www.php.net/manual/en/language.types.type-juggling.php – PeeHaa

+0

和https://eval.in/130579 – PeeHaa

回答

6

PHP嘗試將字符串轉換爲數字在飛行並執行基於其獲得的數學。當一個字符串以非數字開頭時,它會轉換爲零 - 因此您的答案。

當PHP轉換這些,它是在一個從左到右的方式進行:

字符串1 + 5實際上轉換爲數字1 - 那麼42 + 1轉換爲42.你的陳述因此1 * 42和結果是42的一個回聲。你用0回答的陳述,你試圖乘以hi(它被轉換爲零),因此你得到零的結果。

編輯:至於它爲什麼迴應出答案而不是字符串 - 這只是由於運算符的優先級。數學運算符的排名高於字符串運算符 - 所以它將它視爲應該解決的問題,然後迴應它應該回應的內容。

+0

謝謝。我沒有意識到這些琴絃正在被投入整版,然後產品被重鑄成絃樂。如上所述,答案顯而易見。 – dotancohen

+0

沒有probs,PHP是一件有趣的事情。有時候你可以閱讀幾個小時的手冊,找不到你想要的東西,其他時候你只是在正確的答案中發生的時候 - 哦,當你認爲你已經制定出PHP的每一個技巧,它會再次欺騙你。 – Fluffeh