php 5.6 首次支持在命名空间中用 const 声明常量,避免全局污染;需通过完全限定名(如\myapp\conf\db_host)访问,或使用 use const 导入后直接调用。

命名空间内定义常量
PHP 5.6 首次支持在命名空间中用 const 声明常量,不再是全局污染式写法。比如:
php
namespace MyApp\Conf;
const DB_HOST = 'localhost';
const MAX_RETRY = 3;
?>
这样定义后,必须用完整路径 \MyApp\Conf\DB_HOST 访问,或通过 use const MyApp\Conf\DB_HOST; 导入后直接使用。它解决了老项目里 define('DB_HOST', ...) 满天飞、易重名的问题。
可变参数数组(splat 操作符)
PHP 5.6 引入了 ... 操作符,让字符串处理类函数更灵活:
- 定义函数时收参:function join_paths(...$parts) { return implode('/', $parts); }
- 调用时展开数组:$arr = ['user', 'profile', 'id']; echo join_paths(...$arr); // 输出 user/profile/id
这个特性在拼接路径、构建 SQL 片段、组装日志消息等场景中,比 func_get_args() 更直观、类型更明确,且不依赖运行时反射。
正则替换中 \1 和 $1 的行为差异
在 preg_replace 的替换字符串里,\1 是安全写法,而 $1 在双引号中容易被 PHP 当作变量解析(尤其当后面紧接字母或数字时)。例如:
preg_replace('/(\w+)@(\w+)/', "邮箱:\$1@\$2.com", $str)
必须写成 \$1 才能避免误解析;而用单引号+\1 则无此风险:
preg_replace('/(\w+)@(\w+)/', '邮箱:\1@\2.com', $str)
这个细节在模板引擎或用户生成规则的项目中极易出错,但修复成本很低。
u 修饰符强制 UTF-8 校验
带 u 修饰符的正则(如 /\w+/u)在 PHP 5.6 中会严格检查输入是否为合法 UTF-8 字节流。若字符串含 GBK 编码中文或乱码字节,匹配直接失败,preg_last_error() 返回 PREG_BAD_UTF8_ERROR。
实用做法:
- 用 mb_check_encoding($str, 'UTF-8') 提前判断
- 不确定来源时统一转码:mb_convert_encoding($str, 'UTF-8', 'auto')
- 对脏数据可用 iconv('GBK', 'UTF-8//IGNORE', $str) 直接丢弃非法字节
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











