首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

轉 PHP 開發必踩的 4 大坑:strrchr、null/0/空比較、foreach 引用、isset/empty 陷阱

     編輯:PHP 相關知識

轉 PHP 開發必踩的 4 大坑

從 JavaScript、C# 等語言轉 PHP 時,看似熟悉的語法往往暗藏行為差異。本文精選 4 個最高頻、最隱蔽的坑,附原理與避坑姿勢。

1. strrchr() 只匹配「字符」,不匹配「字符串」

$a = 'abcdef.txt';
$b = '.php';
echo strrchr($a, $b); // 輸出 ".txt" 而非 false!

原因:strrchr 第二參數若為字符串,僅取首字符(此處為 '.')查找最後一次出現位置。PHP 無 strrstr,需自行實現或用 strripos + substr。

2. null、''、0 三者鬆散相等(==)全真,嚴格相等(===)全假

$a = null; $b = ''; $c = 0;
var_dump($a == $b); // true
var_dump($a === $b); // false
var_dump($a == $c); // true
var_dump($b == $c); // true

鐵律:永遠優先使用 === / !==。只有明確需要類型轉換語義時才用 ==。

3. foreach 引用賦值後殘留引用,導致後續循環污染數據

$a = [1,2,3];
foreach($a as &$item) { echo $item . ','; } // 1,2,3,
// unset($item); // 若忘記這行
foreach($a as $item) { echo $item . ','; } // 1,2,2  ← 最後元素被改為 1!

原理:首循環結束時 $item 仍引用 $a[2];次循環按值賦值時,實際修改了被引用的 $a[2]。
強制規範:foreach(... as &$v) { ... } unset($v); 成對出現。

4. isset() vs empty():只差一個 null

empty() 為 true 的 8 種情況:null、''、'0'、[]、false、0、0.0、未賦值屬性。
isset() 僅在 null 時返回 false,其餘 7 種全 true。
等價關係:除上述 7 種非 null 情況外,if(empty($x)) === if(!isset($x))。


掌握這 4 大坑,能讓你避開 80% 的 PHP 低級 Bug,寫出更健壯的代碼。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved