程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> 轉PHP開發時,一些常見的坑

轉PHP開發時,一些常見的坑

編輯:關於PHP編程

轉PHP開發時,一些常見的坑


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 . ',';
}
上面的代碼的輸出如下:
1,2,3,1,2,2 看最後一個輸出的是2,而不是3,就是因為代碼裡沒有銷毀$item造成的,原因如下:
第一個循環,把3的引用賦給了$item,第二個循環,把1賦給了$item,因為$item是引用,導致數組的元素3變成了1,明白了嗎?

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(變量))


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved