PHP 常用函數及用法

文章目錄

  • 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); // 輸出: &lt;script&gt;alert(&#039;XSS&#039;)&lt;/script&gt;// 更多參數控制
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]

十、常用函數最佳實踐

  1. 字符串操作:對于包含多字節字符(如中文)的字符串,優先使用 mb_* 系列函數
  2. 數組操作:優先使用 PHP 內置數組函數,避免手動遍歷實現相同功能
  3. 文件操作:對于大文件,避免使用 file_get_contents()file_put_contents(),而應使用 fopen()fread()fwrite() 等函數逐行處理
  4. 日期時間:優先使用 DateTime 類進行日期時間操作,功能更強大且不易出錯
  5. 安全性:始終過濾和驗證用戶輸入,使用參數化查詢防止SQL注入,使用 password_hash()password_verify() 處理密碼
  6. 調試:開發環境中使用 var_dump()print_r() 進行調試,生產環境中使用 error_log() 記錄錯誤

通過掌握這些常用函數及其用法,可以顯著提高PHP編程效率和代碼質量。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/923704.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/923704.shtml
英文地址,請注明出處:http://en.pswp.cn/news/923704.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

yum命令--obsoletes與--allowerasing兩者的區別

在 YUM&#xff08;Yellowdog Updater Modified&#xff09;包管理工具中&#xff0c;–obsoletes 和 --allowerasing 是兩個與包升級 / 安裝相關的選項&#xff0c;它們的功能和使用場景有明顯區別&#xff1a; 1. --obsoletes&#xff08;默認啟用&#xff09;作用&#xff1…

Day24_【深度學習(3)—PyTorch使用(1)—張量的創建和類型轉換】

一、創建張量1.張量基本創建方式torch.tensor 根據指定數據創建張量 &#xff08;最重要&#xff09;torch.Tensor 根據形狀創建張量, 其也可用來創建指定數據的張量torch.IntTensor、torch.FloatTensor、torch.DoubleTensor 創建指定類型的張量1.1 torch.tensor# 方式一&…

阿里云圖像編輯大模型開發部署

與阿里云一起輕松實現數智化讓算力成為公共服務&#xff1a;用大規模的通用計算&#xff0c;幫助客戶做從前不能做的事情&#xff0c;做從前做不到的規模。讓數據成為生產資料&#xff1a;用數據的實時在線&#xff0c;幫助客戶以數據為中心改變生產生活方式創造新的價值。圖像…

查看磁盤分區并新建一個分區,掛載分區

linux系統磁盤df -h查看文件系統的磁盤的空間占用情況&#xff0c;常用于快速檢查磁盤使用率&#xff1a;df -h-h是說把磁盤空間以G位單位&#xff0c;如果直接用df也是可以的&#xff0c;只不過單位是塊&#xff0c;看的不明顯du -sh /home/查看/home目錄下總共占用了多大的空…

vscode單擊暫時預覽文件 雙擊持續打開文件

直接單擊文件列表中的文件&#xff0c;會在編輯器中以預覽模式打開 文件標簽會顯示為斜體&#xff0c;表示是預覽狀態 當您單擊另一個文件或開始編輯時&#xff0c;預覽文件會自動關閉 在 settings.json 中添加&#xff0c;mac通過cmd,實現。 json {"workbench.editor.ena…

設計模式-橋接模式04

什么是橋接模式&#xff1f; 橋接模式就是把事物的兩個方面&#xff08;兩個變化的維度&#xff09;分開管理&#xff0c;讓它們可以分別自由變化&#xff0c;然后通過一個“橋”把它們連接起來。舉個生活中的例子 想象一下你在買鞋子&#xff1a; 鞋子有不同的款式&#xff08…

群暉企業級NAS :從中小企業效率工具到核心業務數據基石

在數字化轉型加速的今天&#xff0c;數據已成為企業最核心的資產。全球超半數財富 500 強企業選擇群暉&#xff08;Synology&#xff09;作為數據管理伙伴&#xff0c;其企業級 NAS 解決方案憑借 DSM 操作系統的生態優勢、硬件與軟件的深度協同&#xff0c;以及覆蓋全場景的產品…

C++訪問限定符private、public、protected的使用場景

C 訪問控制關鍵字&#xff1a;public、private、protected 在C中&#xff0c;public、private和protected是訪問控制關鍵字&#xff0c;用于實現面向對象編程的封裝特性&#xff0c;控制類成員的訪問權限。 訪問控制關鍵字的使用場景 1. public&#xff08;公有成員&#xff09…

CKA08--PVC

Task mariadb namespace 中的 MariaDB Deployment 被誤刪除。請恢復該 Deployment 并確保數據持久性。 請按照以下步驟&#xff1a; 如下規格在 mariadb namespace 中創建名為 mariadb 的 PersistentVolumeClaim (PVC)&#xff1a; 訪問模式為 ReadWriteOnce 存儲為 250Mi 集群…

Freertos系列(調度機制與創建任務)

如果不想看的可以直接使用git把我的代碼下載出來&#xff0c;里面工程挺全的&#xff0c;后期會慢慢的補注釋之類的 碼云地址&#xff1a;stm32學習筆記: stm32學習筆記源碼 如果不會使用git快速下載可以選擇直接下載壓縮包或者去看看git的使用 Git入門教程-CSDN博客 一 調…

C++中std::vector Vs std::deque VS std::list對比詳解

1) 核心差異速覽 std::vector&#xff1a;連續內存、隨機訪問 O(1)、尾部 push_back 攤還 O(1)、中間插入/刪除 O(n)&#xff0c;非常緩存友好。std::deque&#xff1a;分段&#xff08;block&#xff09;存儲&#xff0c;不是整體連續&#xff1b;隨機訪問 O(1)&#xff08;但…

【js】js實現日期轉大寫:

文章目錄一、方法&#xff1a;二、使用效果&#xff1a;一、方法&#xff1a; export function dateToChnese(strDate) {let dateMap {year: "",month: "",day: ""}if (!strDate || strDate.length 0) return dateMap;const chineseDigit [&…

逆向 js

參考地址&#xff1a;https://blog.csdn.net/2302_80243887/article/details/146349209 注意事項 1. crypto-js 安裝 需要你的.js文件同級目錄執行npm install crypto-js 才能讓js文件引入包 注意事項2&#xff1a; crypto-js 執行js 報錯_external_runtime.py" A…

FFmpeg的安裝及簡單使用

簡介 FFmpeg 是一個跨平臺的音視頻處理工具庫/命令行工具&#xff0c;其核心作用是&#xff1a;對音視頻文件或流進行解碼、轉換&#xff08;編碼&#xff09;、封裝/解封裝等處理。 友情提示 本次安裝以Windows64位操作系統為例 一、下載及安裝 1、前往FFmpeg官網&#xff0…

Science Advances--3D打印生物啟發扭曲雙曲超材料,用于無人機沖擊緩沖和自供電實時傳感

湍流引起的振動會對飛機的結構完整性及飛行穩定性造成巨大威脅&#xff0c;尤其是在無人駕駛飛行器&#xff08;UAV&#xff09;中&#xff0c;實時的沖擊監測和輕質防護尤為重要。該研究基于生物啟發&#xff0c;通過3D 打印尼龍PA12 制備了一種扭轉-雙曲面超材料&#xff08;…

AI大模型的研發流程

開發一個大模型是一個龐大、復雜且資源密集的系統工程&#xff0c;涉及算法研究、工程實現、數據管理和算力基礎設施等多個層面。下面我將為您提供一個從零開始開發大模型的全景式路線圖&#xff0c;涵蓋了從概念到部署的全過程。請注意&#xff0c;完全從零開始訓練一個類似GP…

Docker desktop安裝Redis Cluster集群

本文章將介紹如何在 Windows 系統的 Docker Desktop 環境中搭建 Redis 集群。將創建一個包含 6 個節點&#xff08;3 主 3 從&#xff09;的 Redis 集群。 環境準備 Windows 10/11 操作系統Docker Desktop 已安裝并運行 步驟 清理環境&#xff08;如之前有嘗試&#xff09; 如果…

Zynq開發實踐(SDK之第一個純PS工程)

【 聲明&#xff1a;版權所有&#xff0c;歡迎轉載&#xff0c;請勿用于商業用途。 聯系信箱&#xff1a;feixiaoxing 163.com】學編程的時候&#xff0c;大家一般都比較重視第一個項目的創建和執行。第一個fpga程序一般是led閃爍&#xff0c;第一個c程序一般就是hello world程…

EJS(Embedded JavaScript)(一個基于JavaScript的模板引擎,用于在HTML中嵌入動態內容)

文章目錄**1. 什么是 EJS&#xff1f;****2. 核心特點**- **接近原生 HTML**- **動態渲染**- **輕量高效**- **與 Express 深度集成****3. EJS 的基本語法****4. 示例代碼****HTML 模板&#xff08;views/user.ejs&#xff09;****Express 中渲染模板****5. 使用場景**1. **服務…

Linux:基于阻塞隊列的生產者消費模型

文章目錄一、生產者消費者模型的基本原則&#x1f495;&#x1f495;生產者-消費者模型的 321 原則&#x1f495;&#x1f495;二、為何要使用生產者消費者模型1. 解耦2. 支持并發 &#xff08;提高效率&#xff09;3. 忙閑不均的支持三、基于 BlockingQueue 的生產者消費者模型…