扫码一下
查看教程更方便
含十六进制字符串不再被认为是数字。例如:
<?php
var_dump("0x123" == "291");
var_dump(is_numeric("0x123"));
var_dump("0xe" + "0x1");
var_dump(substr("foo", "0x1"));
?>
以上程序在 PHP 5 中的输出:
bool(true)
bool(true)
int(15)
string(2) "oo"
以上程序在 PHP 7 中的输出:
bool(false)
bool(false)
int(0)
Notice: A non well formed numeric value encountered in /tmp/test.php on line 5
string(3) "foo"
filter_var() 函数可以用于检查一个 string 是否含有十六进制数字,并将其转换为integer:
<?php
$str = "0xffff";
$int = filter_var($str, FILTER_VALIDATE_INT, FILTER_FLAG_ALLOW_HEX);
if (false === $int) {
throw new Exception("Invalid integer!");
}
var_dump($int); // int(65535)
?>
由于新的 Unicode codepoint escape syntax语法, 紧连着无效序列并包含\u{
的字串可能引起致命错误。 为了避免这一报错,应该避免反斜杠开头。