1、strrchr函數
在W3School站點上的注釋如下:
strrchr() 函數查找字符串在另一個字符串中最後一次出現的位置,並返回從該位置到字符串結尾的所有字符。
如果成失敗,否則返回 false。
實際上,這個函數是查找某個字符,而不是查找字符串,應該參考官方文檔
代碼示例:
$a = 'abcdef.txt'; $b = '.php'; echo strrchr($a, $b);上面的代碼輸出是:.txt
也就是說,如果$b是字符串,只使用第一個字符,後面的其它字符會忽略
注:php提供了strstr函數,為什麼不提供strrstr函數呢,雖然自己實現也很簡單
2、null和空、0,三個值的比較
在PHP中,== 會先進行類型轉換,再進行對比,而===會先比較類型,如果類型不同直接返回不相等,參考如下示例
$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對於我這種以前只寫js或C#代碼的碼農,被這3個值忽悠過n次,n大於3
3、foreach裡的引用賦值,參見官方文檔
這個引用賦值很好哇,對用C#的我,在C#裡要修改foreach的元素,是不可能的,是會出異常滴,php把這個變成了可能,但是:
在官方文檔裡有一句警告:Warning 數組最後一個元素的 $value 引用在 foreach 循環之後仍會保留。建議使用 unset() 來將其銷毀。
我們看一組代碼:
$a = [1,2,3]; foreach($a as &$item){ echo $item . ','; } //unset($item); // 引用賦值後不銷毀對象 foreach($a as $item){ echo $item . ','; }上面的代碼的輸出如下:
4、isset與empty的聯系和區別,isset文檔 empty文檔
empty對如下8種情況返回true:
null、 空串""、字符串0"0"、空array、布爾值false、數字0、浮點數0.0、類裡用var定義但是未賦值
isset 檢測變量是否設置,並且不是 NULL,但是對於empty的8種情況,只有null返回false,其它7種情況都返回true
綜上所述,除了empty描述的的非null的7種情況,在其它情況下, if(empty(變量)) 等效於 if(!isset(變量))