2012-07-19 62 views
6

這種行爲在PHP中是否正確?PHP類型轉換優先級

​​

據我所知,減去被級聯以鑄造爲整數的第一個「1」和「-1」,而不是「2」爲字符串。

請解釋原因。

解決問題的最佳方法是什麼? 這一個?所有的

<?php echo '-' . (string)1 + 1 . ' crazy cats'; ?> 
+0

驚訝,這不是愚弄的人..所以+1 – Louis 2012-07-19 02:01:20

回答

1

如果你願意的話,這樣就避免了優先級:

printf('-%d crazy cats',1+1); 
6

首先,它是正確的,如果它是不同的,也將是正確的,這是PHP開發人員如何定義的操作的優先級。
在這種情況下,沒有操作的優先級,你還是你讀它從左到右

  1. '-' . 1 ==> '-1'
  2. '-1' + 1 ==> 0(對字符串的算術運算,會盡量給他們,然後再轉換爲數字做算術)。
  3. 0 . ' crazy cats' ==> "0 crazy cats"(對數字進行字符串操作,會將它們轉換爲字符串)。
+2

哎呀,你比我快:)順便說一句,運算符優先級可訪問:http:// php.net/manual/en/language.operators.precedence.php。 – 2012-07-19 01:55:34

1

您的言辭已關閉。 '-'沒有被鑄造,但被連接。

PHP仍然會將(string) 1-1視爲一個整數。

.+/-在PHP中具有相同的優先級,所以字符串可以從左到右讀取。

以上是類似於說:

echo '-1' + '1 crazy cats'; 
+0

當然沒有鑄造虧損,糾正了這個問題。 – Paker 2012-07-19 01:59:31

4

如果你想瘋-2貓,你可以設置優先處理與括號:

echo '-' . (1 + 1) . ' crazy cats'; 
3

echo也遵循echo 'foo', 'bar'的結構,它將這些項目分成不同的語句來回顯。在這種情況下,您不必擔心連接順序。

所以你可以做<?php echo '-', (1 + 1), ' crazy cats'; ?>和你的貓不會在乎負面!