‘abc' == 0 return truephp
由於這是一個數字和一個字符串進行比較,PHP會把字符串轉換成數字再進行比較。PHP轉換的規則的是:若字符串以數字開頭,則取開頭數字做爲轉換結果,若無則輸出0。例如:123abc轉換後應該是123,而abc則爲0,0==0這固然是成立的.具體能夠參考官方手冊:若是比較一個整數和字符串,則字符串會被轉換爲整數數組
null和空、0,三個值的比較函數
在PHP中,== 會先進行類型轉換,再進行對比,而===會先比較類型,若是類型不一樣直接返回不相等,參考以下示例spa
$a = null; $b = ''; $c = 0; echo ($a == $b)?1:0; // 輸出1 echo ($a === $b)?1:0; // 輸出0 echo ($a == $c)?1:0; // 輸出1 echo ($a === $c)?1:0; // 輸出0 echo ($b == $c)?1:0; // 輸出1 echo ($b === $c)?1:0; // 輸出0
3.foreach裏的引用賦值,參見官方文檔code
在官方文檔裏有一句警告:Warning 數組最後一個元素的 $value 引用在 foreach 循環以後仍會保留。建議使用 unset() 來將其銷燬。對象
咱們看一組代碼:文檔
$a = [1,2,3]; foreach($a as &$item){ echo $item . ','; } //unset($item); // 引用賦值後不銷燬對象 foreach($a as $item){ echo $item . ','; }
上面的代碼的輸出以下:字符串
1,2,3,1,2,2 看最後一個輸出的是2,而不是3,就是由於代碼裏沒有銷燬$item形成的,緣由以下:it
第一個循環,把3的引用賦給了$item,第二個循環,把1賦給了$item,由於$item是引用,致使數組的元素3變成了1,明白了嗎?class
4. isset與empty的聯繫和區別
empty對以下8種狀況返回true:
null、 空串""、字符串0"0"、空array、布爾值false、數字0、浮點數0.0、類裏用var定義可是未賦值 www.stuhack.com
isset 檢測變量是否設置,而且不是 NULL,可是對於empty的8種狀況,只有null返回false,其它7種狀況都返回true
綜上所述,除了empty描述的的非null的7種狀況,在其它狀況下, if(empty(變量)) 等效於 if(!isset(變量))
5. strrchr函數
在W3School站點上的註釋以下:
strrchr() 函數查找字符串在另外一個字符串中最後一次出現的位置,並返回從該位置到字符串結尾的全部字符。
若是成失敗,不然返回 false。
實際上,這個函數是查找某個字符,而不是查找字符串,應該參考官方文檔
代碼示例:
$a = 'abcdef.txt'; $b = '.php'; echo strrchr($a, $b);
上面的代碼輸出是:.txt
也就是說,若是$b是字符串,只使用第一個字符,後面的其它字符會忽略
注:php提供了strstr函數,爲何不提供strrstr函數呢,雖然本身實現也很簡單