文章目錄
- PHP 常用函數及用法
- 一、字符串處理函數
- 1. 字符串基礎操作
- 2. 字符串查找與替換
- 3. 字符串分割與連接
- 4. 字符串大小寫轉換
- 5. 字符串格式化
- 二、數組操作函數
- 1. 數組基礎操作
- 2. 數組遍歷與查找
- 3. 數組修改與排序
- 4. 數組過濾與合并
- 三、文件操作函數
- 1. 文件讀寫
- 2. 文件和目錄信息
- 四、日期和時間函數
- 1. 日期時間格式化
- 2. DateTime 類
- 五、HTTP請求和響應函數
- 1. 獲取請求信息
- 2. HTTP響應控制
- 六、安全相關函數
- 1. 輸入驗證與過濾
- 2. 密碼加密
- 七、調試和錯誤處理函數
- 1. 輸出函數
- 2. 錯誤日志
- 3. 錯誤處理
- 八、其他常用函數
- 1. 類型轉換與檢查
- 2. 數學函數
- 3. 其他實用函數
- 九、PHP 7+ 新增常用函數
- 1. 空合并運算符函數
- 2. 數組展開運算符
- 3. 箭頭函數 (PHP 7.4+)
- 十、常用函數最佳實踐
PHP 常用函數及用法
本文檔整理了PHP中最常用的函數及其用法,按照功能分類,方便快速查閱和學習。
一、字符串處理函數
1. 字符串基礎操作
strlen() - 獲取字符串長度
$str = "Hello, World!";
echo strlen($str); // 輸出: 13
mb_strlen() - 多字節字符串長度
$str = "你好,世界!";
echo mb_strlen($str, 'UTF-8'); // 輸出: 6
trim() - 去除字符串首尾空白
$str = " Hello World ";
echo trim($str); // 輸出: "Hello World"
// 可選參數:指定要移除的字符
echo trim($str, " Hd!"); // 輸出: "ello Worl"
ltrim()/rtrim() - 去除左側/右側空白
$str = " Hello World ";
echo ltrim($str); // 輸出: "Hello World "
echo rtrim($str); // 輸出: " Hello World"
2. 字符串查找與替換
strpos() - 查找子串首次出現位置
$str = "Hello, World!";
$pos = strpos($str, "World");
echo $pos; // 輸出: 7
// 找不到返回false
if (strpos($str, "PHP") === false) {echo "未找到PHP";
}
strrpos() - 查找子串最后出現位置
$str = "Hello, World! World!";
echo strrpos($str, "World"); // 輸出: 14
str_replace() - 字符串替換
$str = "Hello, World!";
$newStr = str_replace("World", "PHP", $str);
echo $newStr; // 輸出: "Hello, PHP!"// 數組形式批量替換
$search = ["Hello", "World"];
$replace = ["Hi", "PHP"];
echo str_replace($search, $replace, $str); // 輸出: "Hi, PHP!"
preg_replace() - 正則表達式替換
$str = "Hello123World456";
$newStr = preg_replace("/\d+/", "", $str);
echo $newStr; // 輸出: "HelloWorld"
3. 字符串分割與連接
explode() - 將字符串分割為數組
$str = "apple,banana,orange";
$fruits = explode(",", $str);
print_r($fruits); // 輸出: Array([0] => apple [1] => banana [2] => orange)// 限制分割數量
$fruits = explode(",", $str, 2);
print_r($fruits); // 輸出: Array([0] => apple [1] => banana,orange)
implode()/join() - 將數組元素連接為字符串
$fruits = ["apple", "banana", "orange"];
$str = implode(", ", $fruits);
echo $str; // 輸出: "apple, banana, orange"
// join是implode的別名
$str = join(", ", $fruits);
substr() - 截取子串
$str = "Hello, World!";
echo substr($str, 0, 5); // 輸出: "Hello"
echo substr($str, 7); // 輸出: "World!"
echo substr($str, -6); // 輸出: "World!"(從末尾開始)
echo substr($str, -6, -1); // 輸出: "World"(從末尾開始,長度-1)
4. 字符串大小寫轉換
strtolower() - 轉換為小寫
$str = "Hello, WORLD!";
echo strtolower($str); // 輸出: "hello, world!"
strtoupper() - 轉換為大寫
$str = "Hello, World!";
echo strtoupper($str); // 輸出: "HELLO, WORLD!"
ucfirst() - 首字母大寫
$str = "hello, world!";
echo ucfirst($str); // 輸出: "Hello, world!"
ucwords() - 每個單詞首字母大寫
$str = "hello, world!";
echo ucwords($str); // 輸出: "Hello, World!"
5. 字符串格式化
sprintf() - 格式化字符串
$name = "張三";
$age = 30;
$str = sprintf("我的名字是%s,今年%d歲。", $name, $age);
echo $str; // 輸出: "我的名字是張三,今年30歲。"// 常用格式說明符:
// %s - 字符串
// %d - 整數
// %f - 浮點數
// %.2f - 保留2位小數的浮點數
printf() - 格式化并直接輸出
printf("我的名字是%s,今年%d歲。", $name, $age);
// 等同于 echo sprintf(...)
二、數組操作函數
1. 數組基礎操作
count() - 計算數組元素個數
$arr = ["apple", "banana", "orange"];
echo count($arr); // 輸出: 3// 計算多維數組所有元素
$multiArr = [[1, 2], [3, 4]];
echo count($multiArr, COUNT_RECURSIVE); // 輸出: 4
is_array() - 檢查變量是否為數組
$arr = ["apple", "banana"];
var_dump(is_array($arr)); // 輸出: bool(true)
in_array() - 檢查值是否在數組中
$arr = ["apple", "banana", "orange"];
echo in_array("banana", $arr); // 輸出: 1 (true)
echo in_array("grape", $arr); // 輸出: (空) false// 嚴格比較(類型也必須相同)
echo in_array(0, $arr, true); // 輸出: false
2. 數組遍歷與查找
array_search() - 在數組中搜索值并返回鍵名
$arr = ["a" => "apple", "b" => "banana", "c" => "orange"];
echo array_search("banana", $arr); // 輸出: b// 嚴格比較
$arr = [0 => "apple", 1 => 0, 2 => "orange"];
echo array_search("0", $arr, true); // 輸出: (空) false
array_key_exists() - 檢查鍵名是否存在
$arr = ["a" => "apple", "b" => "banana"];
echo array_key_exists("a", $arr); // 輸出: 1 (true)
echo array_key_exists("c", $arr); // 輸出: (空) false
array_keys() - 獲取數組所有鍵名
$arr = ["a" => "apple", "b" => "banana"];
print_r(array_keys($arr)); // 輸出: Array([0] => a [1] => b)// 可選參數:只獲取特定值的鍵名
$arr = ["a" => 1, "b" => 2, "c" => 1];
print_r(array_keys($arr, 1)); // 輸出: Array([0] => a [1] => c)
array_values() - 獲取數組所有值
$arr = ["a" => "apple", "b" => "banana"];
print_r(array_values($arr)); // 輸出: Array([0] => apple [1] => banana)
3. 數組修改與排序
array_push() - 將一個或多個元素壓入數組末尾
$arr = ["apple", "banana"];
array_push($arr, "orange", "grape");
print_r($arr); // 輸出: Array([0] => apple [1] => banana [2] => orange [3] => grape)
array_pop() - 彈出數組最后一個元素
$arr = ["apple", "banana", "orange"];
$last = array_pop($arr);
echo $last; // 輸出: orange
print_r($arr); // 輸出: Array([0] => apple [1] => banana)
array_shift() - 移除數組第一個元素
$arr = ["apple", "banana", "orange"];
$first = array_shift($arr);
echo $first; // 輸出: apple
print_r($arr); // 輸出: Array([0] => banana [1] => orange)
array_unshift() - 在數組開頭插入一個或多個元素
$arr = ["apple", "banana"];
array_unshift($arr, "grape", "orange");
print_r($arr); // 輸出: Array([0] => grape [1] => orange [2] => apple [3] => banana)
sort() - 對數組進行升序排序
$arr = [3, 1, 4, 2];
sort($arr);
print_r($arr); // 輸出: Array([0] => 1 [1] => 2 [2] => 3 [3] => 4)// 關聯數組會丟失鍵名
$arr = ["c" => 3, "a" => 1, "b" => 2];
sort($arr);
print_r($arr); // 輸出: Array([0] => 1 [1] => 2 [2] => 3)
rsort() - 對數組進行降序排序
$arr = [3, 1, 4, 2];
rsort($arr);
print_r($arr); // 輸出: Array([0] => 4 [1] => 3 [2] => 2 [3] => 1)
asort() - 保持索引關系的升序排序
$arr = ["c" => 3, "a" => 1, "b" => 2];
asort($arr);
print_r($arr); // 輸出: Array([a] => 1 [b] => 2 [c] => 3)
arsort() - 保持索引關系的降序排序
$arr = ["c" => 3, "a" => 1, "b" => 2];
arsort($arr);
print_r($arr); // 輸出: Array([c] => 3 [b] => 2 [a] => 1)
ksort() - 按鍵名排序
$arr = ["c" => 3, "a" => 1, "b" => 2];
ksort($arr);
print_r($arr); // 輸出: Array([a] => 1 [b] => 2 [c] => 3)
4. 數組過濾與合并
array_merge() - 合并一個或多個數組
$arr1 = ["a" => "apple", "b" => "banana"];
$arr2 = ["c" => "orange", "d" => "grape"];
$merged = array_merge($arr1, $arr2);
print_r($merged); // 輸出: Array([a] => apple [b] => banana [c] => orange [d] => grape)// 索引數組會重新索引
$arr1 = ["apple", "banana"];
$arr2 = ["orange", "grape"];
print_r(array_merge($arr1, $arr2)); // 輸出: Array([0] => apple [1] => banana [2] => orange [3] => grape)
array_filter() - 用回調函數過濾數組元素
$arr = [1, 2, 3, 4, 5, 6];
// 保留偶數
$even = array_filter($arr, function($value) {return $value % 2 == 0;
});
print_r($even); // 輸出: Array([1] => 2 [3] => 4 [5] => 6)// 過濾空值
$arr = ["apple", null, "banana", "", false];
$nonEmpty = array_filter($arr);
print_r($nonEmpty); // 輸出: Array([0] => apple [2] => banana)
array_map() - 將回調函數應用到數組的每個元素
$arr = [1, 2, 3, 4];
// 每個元素乘以2
$doubled = array_map(function($value) {return $value * 2;
}, $arr);
print_r($doubled); // 輸出: Array([0] => 2 [1] => 4 [2] => 6 [3] => 8)// 多個數組
$arr1 = [1, 2, 3];
$arr2 = [4, 5, 6];
$sum = array_map(function($a, $b) {return $a + $b;
}, $arr1, $arr2);
print_r($sum); // 輸出: Array([0] => 5 [1] => 7 [2] => 9)
array_reduce() - 用回調函數迭代地將數組簡化為單一值
$arr = [1, 2, 3, 4, 5];
// 計算總和
$sum = array_reduce($arr, function($carry, $item) {return $carry + $item;
}, 0);
echo $sum; // 輸出: 15// 計算乘積
$product = array_reduce($arr, function($carry, $item) {return $carry * $item;
}, 1);
echo $product; // 輸出: 120
三、文件操作函數
1. 文件讀寫
file_get_contents() - 將整個文件讀入字符串
$content = file_get_contents("example.txt");
echo $content;// 讀取遠程文件
$content = file_get_contents("https://www.example.com");
file_put_contents() - 將字符串寫入文件
$content = "這是要寫入的內容";
file_put_contents("example.txt", $content);// 追加內容
file_put_contents("example.txt", $content, FILE_APPEND);// 鎖定文件
file_put_contents("example.txt", $content, LOCK_EX);
fopen() - 打開文件或URL
// 打開文件進行讀取
$file = fopen("example.txt", "r");// 打開文件進行寫入(覆蓋)
$file = fopen("example.txt", "w");// 打開文件進行追加
$file = fopen("example.txt", "a");// 打開文件進行讀寫
$file = fopen("example.txt", "r+");
fread() - 讀取文件
$file = fopen("example.txt", "r");
// 讀取指定字節數
$content = fread($file, filesize("example.txt"));
fclose($file);
echo $content;
fwrite() - 寫入文件
$file = fopen("example.txt", "w");
fwrite($file, "這是第一行\n");
fwrite($file, "這是第二行\n");
fclose($file);
fgets() - 從文件指針中讀取一行
$file = fopen("example.txt", "r");
while (!feof($file)) {$line = fgets($file);echo $line . "<br>";
}
fclose($file);
fclose() - 關閉打開的文件指針
$file = fopen("example.txt", "r");
// 操作文件...
fclose($file);
2. 文件和目錄信息
file_exists() - 檢查文件或目錄是否存在
if (file_exists("example.txt")) {echo "文件存在";
} else {echo "文件不存在";
}
is_file()/is_dir() - 檢查是否為文件/目錄
if (is_file("example.txt")) {echo "這是一個文件";
}if (is_dir("mydir")) {echo "這是一個目錄";
}
filesize() - 獲取文件大小
echo filesize("example.txt") . " bytes";
unlink() - 刪除文件
if (file_exists("example.txt")) {unlink("example.txt");echo "文件已刪除";
}
mkdir() - 創建目錄
// 創建單個目錄
mkdir("newdir");// 創建多級目錄
mkdir("parent/child/grandchild", 0777, true);
rmdir() - 刪除目錄
if (is_dir("emptydir")) {rmdir("emptydir");echo "目錄已刪除";
} else {echo "目錄不存在或不為空";
}
scandir() - 列出目錄中的文件和目錄
$files = scandir("mydir");
foreach ($files as $file) {if ($file != "." && $file != "..") {echo $file . "<br>";}
}
四、日期和時間函數
1. 日期時間格式化
date() - 格式化本地日期和時間
// 設置時區
date_default_timezone_set("Asia/Shanghai");// 常用格式
// Y - 四位數年份 (例如: 2023)
// m - 兩位數月份 (01-12)
// d - 兩位數日期 (01-31)
// H - 24小時制小時數 (00-23)
// i - 分鐘數 (00-59)
// s - 秒數 (00-59)echo date("Y-m-d"); // 輸出: 2023-04-15
echo date("Y-m-d H:i:s"); // 輸出: 2023-04-15 14:30:45
echo date("Y年m月d日 H:i:s"); // 輸出: 2023年04月15日 14:30:45
time() - 返回當前時間的Unix時間戳
echo time(); // 輸出: 1681545045 (取決于當前時間)
strtotime() - 將任何英文文本的日期時間描述解析為Unix時間戳
echo strtotime("now"); // 輸出當前時間戳
echo strtotime("+1 day"); // 輸出明天此時的時間戳
echo strtotime("+1 week"); // 輸出下周此時的時間戳
echo strtotime("+1 week 2 days 4 hours 2 seconds"); // 復雜時間計算
echo strtotime("2023-04-15"); // 解析特定日期
echo date("Y-m-d", strtotime("+1 month")); // 下個月的今天
2. DateTime 類
PHP 5.2+ 提供了更強大的 DateTime 類用于日期時間處理
創建 DateTime 對象
// 當前時間
$now = new DateTime();
echo $now->format("Y-m-d H:i:s");// 特定時間
$date = new DateTime("2023-04-15 14:30:00");
echo $date->format("Y-m-d H:i:s");// 設置時區
$date = new DateTime("now", new DateTimeZone("Asia/Shanghai"));
修改日期時間
$date = new DateTime();// 增加1天
$date->modify("+1 day");
echo $date->format("Y-m-d");// 減少2小時
$date->modify("-2 hours");
echo $date->format("Y-m-d H:i:s");// 使用 DateInterval
$date->add(new DateInterval("P1M")); // 增加1個月
$date->sub(new DateInterval("P7D")); // 減少7天
計算日期差值
$start = new DateTime("2023-01-01");
$end = new DateTime("2023-12-31");
$interval = $start->diff($end);// 輸出差值
echo $interval->format("%y年%m月%d天"); // 輸出: 0年11月30天
echo $interval->days; // 輸出: 364 (總天數)
五、HTTP請求和響應函數
1. 獲取請求信息
GET/_GET/G?ET/_POST/$_REQUEST - 獲取請求參數
// 獲取URL參數 (GET請求)
$id = $_GET["id"];// 獲取表單提交數據 (POST請求)
$username = $_POST["username"];
$password = $_POST["password"];// 獲取GET和POST參數
$search = $_REQUEST["search"];
$_SERVER - 服務器和執行環境信息
// 獲取客戶端IP地址
echo $_SERVER["REMOTE_ADDR"];// 獲取服務器IP地址
echo $_SERVER["SERVER_ADDR"];// 獲取請求方法 (GET, POST等)
echo $_SERVER["REQUEST_METHOD"];// 獲取當前腳本路徑
echo $_SERVER["SCRIPT_FILENAME"];// 獲取當前頁面URL
echo "http://" . $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"];// 獲取用戶代理信息
echo $_SERVER["HTTP_USER_AGENT"];
2. HTTP響應控制
header() - 發送原始HTTP頭
// 設置內容類型
header("Content-Type: text/html; charset=utf-8");// 頁面重定向
header("Location: https://www.example.com");
exit; // 重定向后必須退出// 設置HTTP狀態碼
header("HTTP/1.1 404 Not Found");// 設置緩存控制
header("Cache-Control: no-cache, must-revalidate");
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
setcookie() - 設置Cookie
// 基本設置
setcookie("username", "張三", time() + 3600, "/"); // 有效期1小時// 帶更多參數的設置
setcookie("username", // 名稱"張三", // 值time() + 3600, // 過期時間"/", // 路徑"example.com", // 域true, // 僅安全連接true // 僅HTTP
);
session_start() - 啟動新會話或重用現有會話
// 啟動會話
session_start();// 設置會話變量
$_SESSION["username"] = "張三";
$_SESSION["user_id"] = 123;// 訪問會話變量
if (isset($_SESSION["username"])) {echo "歡迎回來," . $_SESSION["username"];
}// 銷毀會話
session_destroy();
六、安全相關函數
1. 輸入驗證與過濾
filter_var() - 使用指定的過濾器過濾變量
// 驗證郵箱
echo filter_var("user@example.com", FILTER_VALIDATE_EMAIL); // 輸出: user@example.com
echo filter_var("invalid-email", FILTER_VALIDATE_EMAIL); // 輸出: false// 驗證URL
echo filter_var("https://www.example.com", FILTER_VALIDATE_URL); // 輸出URL
echo filter_var("invalid-url", FILTER_VALIDATE_URL); // 輸出: false// 驗證IP地址
echo filter_var("192.168.1.1", FILTER_VALIDATE_IP); // 輸出: 192.168.1.1// 過濾HTML標簽
$html = "<p>Hello <script>alert('XSS')</script></p>";
echo filter_var($html, FILTER_SANITIZE_STRING); // 輸出: Hello alert('XSS')
htmlspecialchars() - 將特殊字符轉換為HTML實體
$user_input = "<script>alert('XSS')</script>";
echo htmlspecialchars($user_input); // 輸出: <script>alert('XSS')</script>// 更多參數控制
echo htmlspecialchars($user_input, ENT_QUOTES, 'UTF-8');
strip_tags() - 從字符串中去除HTML和PHP標簽
$html = "<p>Hello <b>World</b></p>";
echo strip_tags($html); // 輸出: Hello World// 允許特定標簽
echo strip_tags($html, "<b>"); // 輸出: Hello <b>World</b>
2. 密碼加密
password_hash() - 創建密碼的哈希值
$password = "user_password";
// 使用默認算法創建哈希值
$hashed_password = password_hash($password, PASSWORD_DEFAULT);
echo $hashed_password;// 指定算法和成本
$hashed_password = password_hash($password, PASSWORD_BCRYPT, ["cost" => 12]);
password_verify() - 驗證密碼是否與哈希值匹配
$password = "user_password";
$hashed_password = "$2y$10$...";if (password_verify($password, $hashed_password)) {echo "密碼正確";
} else {echo "密碼錯誤";
}
password_needs_rehash() - 檢查密碼哈希是否需要重新哈希
$hashed_password = "$2y$10$...";if (password_needs_rehash($hashed_password, PASSWORD_DEFAULT)) {// 重新哈希并更新數據庫$new_hash = password_hash($password, PASSWORD_DEFAULT);// 更新數據庫代碼...
}
七、調試和錯誤處理函數
1. 輸出函數
print_r() - 以易于閱讀的格式打印變量
$arr = ["apple", "banana", "orange"];
print_r($arr); // 輸出數組結構// 在HTML中更美觀地顯示
echo "<pre>";
print_r($arr);
echo "</pre>";
var_dump() - 顯示變量的結構信息(包括類型和值)
$arr = ["apple", "banana", 123, true];
var_dump($arr); // 詳細輸出數組信息
var_export() - 輸出或返回變量的可解析字符串表示
$arr = ["apple", "banana"];
var_export($arr); // 輸出可作為PHP代碼的字符串// 獲取字符串而不是輸出
$str = var_export($arr, true);
echo $str;
2. 錯誤日志
error_log() - 發送錯誤消息到服務器日志或文件
// 發送到服務器錯誤日志
error_log("這是一條錯誤消息");// 發送到指定文件
error_log("這是一條錯誤消息", 3, "/path/to/error.log");// 發送到電子郵件
error_log("嚴重錯誤!", 1, "admin@example.com");
3. 錯誤處理
try/catch/finally - 異常處理
try {// 可能拋出異常的代碼if ($some_condition) {throw new Exception("發生了錯誤");}echo "代碼執行成功";
} catch (Exception $e) {// 捕獲異常并處理echo "錯誤: " . $e->getMessage();
} finally {// 無論是否發生異常都會執行的代碼echo "處理完成";
}
set_error_handler() - 設置用戶定義的錯誤處理函數
// 自定義錯誤處理函數
function customErrorHandler($errno, $errstr, $errfile, $errline) {echo "錯誤代碼: [$errno] $errstr<br>";echo "錯誤文件: $errfile<br>";echo "錯誤行號: $errline<br>";return true; // 阻止標準錯誤處理
}// 設置錯誤處理函數
set_error_handler("customErrorHandler");// 觸發錯誤
echo $undefined_var;
八、其他常用函數
1. 類型轉換與檢查
intval()/floatval()/strval() - 類型轉換
$num = "42";
echo intval($num); // 輸出: 42 (整數)
echo floatval($num); // 輸出: 42.0 (浮點數)
echo strval(42); // 輸出: "42" (字符串)
is_numeric() - 檢查變量是否為數字或數字字符串
echo is_numeric(42); // 輸出: 1 (true)
echo is_numeric("42"); // 輸出: 1 (true)
echo is_numeric("42.5"); // 輸出: 1 (true)
echo is_numeric("42a"); // 輸出: (空) false
empty() - 檢查變量是否為空
$var = "";
echo empty($var); // 輸出: 1 (true)$var = null;
echo empty($var); // 輸出: 1 (true)$var = 0;
echo empty($var); // 輸出: 1 (true)$var = "0";
echo empty($var); // 輸出: 1 (true)$var = "false";
echo empty($var); // 輸出: (空) false
isset() - 檢查變量是否已設置并且不為null
$var = "hello";
echo isset($var); // 輸出: 1 (true)$var = null;
echo isset($var); // 輸出: (空) false// 檢查數組元素是否存在
echo isset($arr["key"]);
2. 數學函數
abs() - 絕對值
echo abs(-42); // 輸出: 42
echo abs(42); // 輸出: 42
round() - 四舍五入
echo round(3.14159); // 輸出: 3
echo round(3.14159, 2); // 輸出: 3.14 (保留2位小數)
echo round(3.5); // 輸出: 4
echo round(4.5); // 輸出: 4 (注意PHP的四舍五入是向偶數舍入)
ceil() - 向上取整
echo ceil(3.1); // 輸出: 4
echo ceil(3.9); // 輸出: 4
echo ceil(-3.1); // 輸出: -3
floor() - 向下取整
echo floor(3.1); // 輸出: 3
echo floor(3.9); // 輸出: 3
echo floor(-3.1); // 輸出: -4
rand() - 生成隨機整數
echo rand(); // 隨機整數
echo rand(1, 10); // 1到10之間的隨機整數
mt_rand() - 使用Mersenne Twister算法生成隨機整數
echo mt_rand(); // 隨機整數
echo mt_rand(1, 10); // 1到10之間的隨機整數
// 比rand()更快、更隨機
3. 其他實用函數
sleep() - 延遲執行
echo "開始";
sleep(5); // 延遲5秒
echo "5秒后";
microtime() - 返回當前Unix時間戳和微秒數
echo microtime(); // 格式: "0.123456 1681545045"// 獲取微秒數用于性能測量
$start = microtime(true);
// 執行一些操作...
$end = microtime(true);
$time = $end - $start;
echo "操作耗時: " . $time . " 秒";
serialize()/unserialize() - 序列化和反序列化
// 序列化數組或對象
$arr = ["apple", "banana"];
$serialized = serialize($arr);
echo $serialized; // 輸出: a:2:{i:0;s:5:"apple";i:1;s:6:"banana"}// 反序列化
$unserialized = unserialize($serialized);
print_r($unserialized); // 輸出原數組
exit()/die() - 輸出消息并終止腳本執行
echo "開始";
die(); // 終止腳本
echo "這不會被輸出";// 帶消息
die("腳本終止");// 在條件檢查中使用
if (!file_exists("file.txt")) {die("文件不存在");
}
九、PHP 7+ 新增常用函數
1. 空合并運算符函數
?? 運算符 - 空合并運算符
// PHP 7+ 語法糖
$name = $_GET["name"] ?? "Guest";
// 等同于
$name = isset($_GET["name"]) ? $_GET["name"] : "Guest";
??= 運算符 - 空合并賦值運算符 (PHP 7.4+)
// 僅當變量未定義或為null時才賦值
$name ??= "Guest";
// 等同于
$name = $name ?? "Guest";
2. 數組展開運算符
… 運算符 - 數組展開運算符 (PHP 7.4+)
$arr1 = [1, 2, 3];
$arr2 = [4, 5, 6];
// 合并數組
$merged = [...$arr1, ...$arr2];
print_r($merged); // 輸出: [1, 2, 3, 4, 5, 6]// 傳遞多個參數
function add($a, $b, $c) {return $a + $b + $c;
}
$numbers = [1, 2, 3];
echo add(...$numbers); // 輸出: 6
3. 箭頭函數 (PHP 7.4+)
fn() => 表達式 - 箭頭函數
// 傳統匿名函數
$double = function($n) {return $n * 2;
};// 箭頭函數
$double = fn($n) => $n * 2;echo $double(4); // 輸出: 8// 在數組函數中使用
$numbers = [1, 2, 3, 4];
$doubles = array_map(fn($n) => $n * 2, $numbers);
print_r($doubles); // 輸出: [2, 4, 6, 8]// 從父作用域繼承變量
$factor = 3;
$triples = array_map(fn($n) => $n * $factor, $numbers);
print_r($triples); // 輸出: [3, 6, 9, 12]
十、常用函數最佳實踐
- 字符串操作:對于包含多字節字符(如中文)的字符串,優先使用
mb_*
系列函數 - 數組操作:優先使用 PHP 內置數組函數,避免手動遍歷實現相同功能
- 文件操作:對于大文件,避免使用
file_get_contents()
和file_put_contents()
,而應使用fopen()
、fread()
、fwrite()
等函數逐行處理 - 日期時間:優先使用
DateTime
類進行日期時間操作,功能更強大且不易出錯 - 安全性:始終過濾和驗證用戶輸入,使用參數化查詢防止SQL注入,使用
password_hash()
和password_verify()
處理密碼 - 調試:開發環境中使用
var_dump()
和print_r()
進行調試,生產環境中使用error_log()
記錄錯誤
通過掌握這些常用函數及其用法,可以顯著提高PHP編程效率和代碼質量。