那些值得思考的PHP問題
1、關于弱類型
函數strpos是返回字符串str2在str1的位置,沒有找到則返回false,然而如果在實際應用上返回的位置是0,在if語句中0也被當作false,所以我們需要對false做類型判斷,
$str1 = 'yabadabadoo'; $str2 = 'yaba'; if (strpos($str1,$str2)!==false) { echo $str1 . " contains " . $str2 ; } else {echo $str1 . "does not contain ".$str2 ; } //輸出 yabadabadoo does not contain yaba//改進部分 strpos($str1,$str2) !== false //輸出 yabadabadoo contains yaba
2、關于運算符的優先級
關于 x++和x–這個問題其實非常容易遇見,我們只需記住$x++使用最近的值,然后才自增。
運算符的優先級,++ 是明顯高于 +,因此先執行++ 再執行 + 。關于運算符的優先級,有的時候我們真的可以通過括號來讓我們的程序更讓人直觀的了解,畢竟代碼不光是用于執行的,有的時候或許團隊的可讀性也是提高效率的一種。
echo $x; echo " "; echo $x+++$x++; echo " "; echo $x; echo " "; echo $x---$x--; echo " "; echo $x; //結果 5 11 7 1 5
3、關于變量的引用
$a = '1'; $b = &$a; $b = "2$b";
4、關于等號和恒等號
//下面是true還是false var_dump(0123 == 123); // false,PHP會默認把0123當作8進制來處理,實際轉化為10進制就是83,顯然這不是相等的。 var_dump('0123' == 123); // true這里php會非常有趣的將’0123′轉換成一個數字而且默認去掉了前面的0也就是123==123 var_dump('0123' === 123);// false很顯然上面的問題已經說過了數字和字符串類型不一致。
5、關于自動轉換,如果我們在與字符串進行數學運算,實際php會盡可能將字符串中的數組進行轉換,如果是數字開頭的話則轉換成改數字比如”15%”會變成15,如果不是數字開頭則會變成0。
$x = 3 + "15%" + "$25" //等同于 $x = 3 + 15 + 0
6、字符串用數組的形式訪問
$text = 'John '; $text[10] = 'Doe'; //運行結果為 John D //$text = “John D”(John后面會有連續的5個空格) strlen($text)會返回11,$text[10] = “Doe”給某個字符串具體的某個位置具體字符時候,實際只會把D賦給$text. 雖然$text才開始只有5個自負長度,但是php會默認填充空格