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); // 输出: &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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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 的生产者消费者模型…