在PHP 8版本中,字符串处理机制如下:
1.含有十六进制字符的字符串不再视为数字
含有十六进制字符的字符串不再视为数字,也不再区别对待。
例如下面的代码:
var_dump("0x123" == "291"); // 结果为false
var_dump(is_numeric("0x123")); // 结果为false
var_dump("0xe" + "0x1"); // 结果为0
可以使用filter_var函数来检查一个字符串是否包含十六进制字符或者是否可以转成整型。
例如下面的代码:
$str = "0xffff";
$int = filter_var($str, FILTER_VALIDATE_INT, FILTER_FLAG_ALLOW_HEX);
if (false === $int) {
throw new Exception("非法整数值!");
}
var_dump($int); // 结果为65535
2.“\u{”后面包含非法字符会报错
双引号和heredocs语法里面增加了unicode码点转义语法,“\u{”后面必须是UTF-8字符。如果是非UTF-8字符,就会报错:
$str = "\u{xyz}"; // Parse error: Invalid UTF-8 codepoint escape sequence
可以通过对第1个\进行转义来避免这种错误。
$str = "\\u{xyz}"; //不会报错
“\u”后面如果没有{,则没有影响:
$str = "\u202e"; //不会报错