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/GET/_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编程效率和代码质量。