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

PHP 常用函數大全與常見疑難問題解析

     編輯:PHP 相關知識

雖然 PHP 在企業級應用的綜合功能上不如 Java 強大,但 Java 屬於重量級框架,部署與維護成本較高。因此在中小型系統開發中,PHP 凭藉輕量、上手快、生態豐富的優勢,佔據了不可撼動的主導地位。即使是淘寶這樣的大型電商平台,也採用「Java 後台邏輯 + PHP 前台展示」的混合架構。想快速入門 Web 後端開發,學習 PHP 依然是極具性價比的選擇。

一、PHP 字串操作常用函數速查

1. 取得字串長度

int strlen(string $str):返回字串的字節長度(非字符數,中文需配合 mb_strlen)。

2. 字串比較

  • int strcmp(string $str1, string $str2):二進制安全比較,區分大小寫;相等返回 0,str1 > str2 返回 >0,否則 <0。
  • int strcasecmp(string $str1, string $str2):不區分大小寫比較,規則同 strcmp。

3. 取得字串相同/不同前綴長度

  • int strspn(string $str1, string $str2):返回 str1 中僅包含 str2 字符的最長前綴長度。
  • int strcspn(string $str1, string $str2):返回 str1 中不包含 str2 任何字符的最長前綴長度。

4. 大小寫轉換

  • strtolower():全轉小寫
  • strtoupper():全轉大寫
  • ucfirst():首字符大寫
  • ucwords():每個單詞首字符大寫

5. 字串與 HTML 互轉

  • nl2br():將換行符轉為 <br>(注意原文寫錯為 bl2br)
  • htmlentities() / htmlspecialchars():特殊字符轉 HTML 實體,防 XSS
  • strip_tags():移除 HTML/PHP 標籤,可保留允許標籤
  • get_html_translation_table():取得轉換對照表
  • strtr():自定義字符替換映射

6. 替代正則的常用解析函數

  • strtok():按 token 切分字串
  • explode():按分隔符分割成陣列
  • implode():陣列合併為字串
  • strpos() / strrpos():查找首次/最後一次出現位置
  • str_replace():批量替換(支援陣列)
  • strstr():返回首次出現位置及其後內容
  • substr():截取子串(支援負數索引)
  • substr_count():統計子串出現次數
  • substr_replace():替換字串部分內容

7. 填充與修剪

  • ltrim() / rtrim() / trim():移除左右/兩側指定字符(預設空白)
  • str_pad():將字串填充至指定長度

8. 字符與單詞統計

  • count_chars():字符頻率統計
  • str_word_count():單詞計數

二、Web 表單驗證三大核心函數深度解析

1. isset() — 檢測變量是否「存在且非 null」

適用場景:判斷 $_GET/$_POST 是否包含某參數(即使值為空字串、0、false 也返回 true)。
陷阱:?fo= 會通過檢測;?fo=0 也通過。不適合驗證「用戶是否輸入了有效內容」。

2. empty() — 檢測變量是否為「空值」

判定為空的值:""、0、"0"、null、false、array()、未聲明變量。
適用:表單必填欄位驗證。
不適用:允許用戶提交「0」的業務場景(如價格、數量)。

3. is_numeric() — 純數字檢測

僅適用於「已確定參數存在」的二次檢測。若參數缺失會觸發 Notice,不可作為第一層防禦。

綜合最佳實踐範例

<?php
// 建議驗證順序:isset → empty → is_numeric
if (!isset($_GET['id'])) {
    exit('缺少必要參數');
}
if (empty($_GET['id'])) {
    exit('參數不能為空');
}
if (!is_numeric($_GET['id'])) {
    exit('參數必須為數字');
}
$id = (int)$_GET['id']; // 安全轉型
?>

補充:checkdate($month, $day, $year) 可驗證日期合法性(含閏年)。

三、其他高頻實用函數

1. 運行時配置操作:ini_set / ini_get

常見用途:

  • 檢測 magic_quotes_gpc 決定是否 addslashes
  • ini_set('max_execution_time', 300) 延長執行時間
  • 動態切換 error_reporting 區分開發/生產環境
  • ini_set('memory_limit', '256M') 臨時提高記憶體上限
  • 擴展 include_path:ini_set('include_path', ini_get('include_path').':/your/path')

2. 目錄切換:chdir(dirname(__FILE__))

確保相對路徑包含文件時基準目錄正確,避免「No such file」錯誤。

3. 輸出緩衝控制:ob_start('callback')

可註冊回調函數處理輸出內容(如壓縮、替換、快取)。

4. 型別轉換:intval($var, $base=10)

安全將變量轉為整數,支援指定進制(如 16 進制)。

5. 錯誤報告級別控制:error_reporting()

<?php
error_reporting(0);                          // 關閉所有報錯
error_reporting(E_ERROR | E_WARNING | E_PARSE); // 僅報告嚴重錯誤
error_reporting(E_ALL);                      // 開發環境建議開啟
?>

四、常見疑難問題精選解答

Q1: rand() vs mt_rand() 差異?

mt_rand() 基於梅森旋轉演算法,速度約為 rand() 的 4 倍,隨機品質更高,建議優先使用。
範例:mt_rand(5, 15) 產生 5~15 之間隨機整數。

Q2: echo/print/print_r/printf/sprintf/var_dump 差異總覽

語句/函數類型返回值多參數典型用途
echo語言結構void支援逗號分隔(無括號)高效輸出
print語言結構恆為 1單參數需在表達式中輸出時
print_r函數bool/string單參數 + 可選返回陣列/物件結構檢視
printf函數輸出長度格式化字串 + 多參數格式化直接輸出
sprintf函數格式化字串同 printf格式化後存入變量
var_dump函數void多參數調試:顯示型別、長度、值

關鍵細節:

  • echo "a","b" 合法;echo("a","b") 報錯。
  • printf 佔位符支援 %2$s 指定參數順序。
  • var_dump 會輸出型別與長度:string(5) "hello"。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved