// 實現路徑:zif_count → php_count_recursive → zend_hash_num_elements
// zend_hash_num_elements 直接返回 ht->nNumOfElements
陣列底層為 HashTable,維護元素計數器,count() 直接讀取,複雜度 O(1)。非陣列:未設定變數返回 0,標量返回 1。
PHP 字串結構包含 len 欄位,strlen() 直接返回長度,不遍歷。非字串會先轉字串再取長(注意副作用)。
isset():偽函數,單條 Opcode,檢查變數存在且非 nullarray_key_exists():真函數,HashTable 查找,檢查鍵存在(值可為 null)isset(),需區分 null 值時才用 array_key_exists()array_push():函數調用,支援多值推入$arr[] = $val:語言結構,單條 Opcode,效率更高$arr[]rand():libc 標準 rand(),週期短、品質差mt_rand():Mersenne Twister,速度快 4 倍、週期 2^19937-1mt_rand(),PHP 7.1+ 兩者統一實現srand() 對應 rand(),mt_srand() 對應 mt_rand(),不可混用usort() 允許自定義比較函數,但回調開銷大sort()/rsort()/asort() 等urlencode() → +,rawurlencode() → %20%20,搜尋引擎傾向 +rawurlencode(),表單提交用 urlencode()\0,底層用 memcmp 而非 strcmpstrcasecmp/strncasecmp 不區分大小寫版本| 函數 | 檢查內容 | 複雜度 | 範例返回 true |
|---|---|---|---|
| is_int() | 變數類型為 IS_LONG | O(1) | 123, -10, 0 |
| is_numeric() | 整數或數字字串(含科學記號) | O(n) 遍歷字串 | 123, "123", "1e4", "0xFF" |
xdebug.max_nesting_levelisset/empty/unset 同等功能下首選&$arr)fn($x) => $x * 2:語法糖,編譯為靜態閉包,效能優於 create_functionfunction foo(int $a): string 讓引擎優化機會更多理解底層原理,寫出高性能 PHP 代碼不再是玄學,而是工程選擇。