php 7.1在字符串处理上新增可为空字符串类型声明、负偏移量下标访问、/u正则更严格的utf-8校验,以及list()支持字符串键名解构,提升类型安全与操作便利性。

可为空字符串类型声明
PHP 7.1 新增 可为空类型(Nullable Types),允许显式声明字符串参数或返回值可以为 null:
- PHP 7.0 不支持
?string,写function foo(?string $s) { }会报语法错误 - PHP 7.1 允许:
function getName(?string $name): ?string { return $name; } - 调用时可传
null:getName(null)合法;而getName()(缺参)仍触发“Too few arguments”错误
负偏移量支持(字符串下标访问)
PHP 7.1 开始,字符串支持负数索引,从末尾反向取字符,行为与数组一致:
-
$str = 'hello'; echo $str[-1]; // 输出 'o'—— PHP 7.0 会警告并返回false或空字符串 -
substr($str, -2); // 'lo'在 7.0 中已支持,但直接$str[-2]是 7.1 新增 - 注意:仅适用于单字节字符;含 UTF-8 多字节字符时,
$str[-1]取的是最后一个字节,不是最后一个 Unicode 字符(需用mb_substr())
u 修饰符对非法 UTF-8 字符串更严格
虽然正则本身不属于“字符串类型”,但它直接操作字符串内容。PHP 7.1 对带 /u 修饰符的正则匹配做了编码校验收紧:
- 若字符串含截断的 UTF-8 字节(如从数据库读出未转码的 GBK 数据),PHP 7.0 可能静默部分匹配或返回
false无提示 - PHP 7.1 明确返回
false,且preg_last_error() === PREG_BAD_UTF8_ERROR - 实际影响:原来能“蒙混过关”的中文正则(如
preg_match('/\w+/u', $str)),在 7.1 下可能突然失败,需提前用mb_check_encoding($str, 'UTF-8')或mb_convert_encoding($str, 'UTF-8', 'auto')清洗
list() 解构支持字符串键名(间接影响字符串使用)
PHP 7.1 允许 list() 内部指定键名,当从关联数组(常由字符串键构成)解构时更直观:
-
$user = ['name' => 'Alice', 'age' => 30]; list('name' => $n, 'age' => $a) = $user;—— 这在 7.0 中语法报错 - 虽不直接操作字符串值,但大幅简化了从 JSON 解码、数据库字段等以字符串为键的结构中提取数据的写法
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











