PHP 7.3 新特性介绍
is_countable
rfc
当计数不可数的对象时,PHP 7.2添加了警告。 is_countable函数可以帮助防止此警告。
$count = is_countable($variable) ? count($variable) : null;
array_key_first
and array_key_last
rfc
这两个函数基本上可以按照名称所说的进行操作。
$array = [
'a' => '…',
'b' => '…',
'c' => '…',
];
array_key_first($array); // 'a'
array_key_last($array); // 'c'
原始RFC还提出了 array_value_first
和 array_value_last
, 但是这些遭到了大多数人的反对。
另一个 array_first
和 array_last
被返回一个元组 [$key => $value]
,目前,我们只有两个函数来获取数组的第一个键和最后一个键。
灵活的Heredoc语法 rfc
Heredoc对于较大的字符串可能是有用的工具,尽管过去它们有缩进的怪癖。
// Instead of this:
$query = <<<SQL
SELECT *
FROM `table`
WHERE `column` = true;
SQL;
// You can do this:
$query = <<<SQL
SELECT *
FROM `table`
WHERE `column` = true;
SQL;
在已经嵌套的上下文中使用Heredoc时,这特别有用。
结束标记前面的空白将在所有行上被忽略。
重要说明:由于此更改,一些现有的Heredocs可能会中断, 当他们在体内使用相同的结束标记时。
$str = <<<FOO
abcdefg
FOO
FOO;
// Parse error: Invalid body indentation level in PHP 7.3
函数调用中的尾部逗号 rfc
数组已经可以实现的函数,现在也可以通过函数调用来实现。 注意,在函数定义中是不可能的!
$compacted = compact(
'posts',
'units',
);
更友好的错误信息
TypeErrors
用于整数和布尔值,用于打印其全名, 它已更改为 int
和 bool
,以匹配代码中的类型提示。
Argument 1 passed to foo() must be of the type int/bool
与PHP 7.2相比:
Argument 1 passed to foo() must be of the type
integer/boolean
JosnException异常 rfc
以前,JSON解析错误调试起来很麻烦。 JSON函数现在接受一个额外的选项,使它们在解析错误时引发异常。 显然,此更改添加了一个新的异常: JsonException
。
json_encode($data, JSON_THROW_ON_ERROR);
json_decode("invalid json", null, 512, JSON_THROW_ON_ERROR);
// Throws JsonException
虽然此函数仅在新添加的选项中可用, 有可能它将成为将来版本中的默认行为。
列表引用分配 rfc
list()
及其速记的 []
语法现在支持引用。
$array = [1, 2];
list($a, &$b) = $array;
$b = 3;
// $array = [1, 3];
Compact未定义变量 rfc
传递给 compact
的未定义变量将被通知,并且之前会被忽略。
$a = 'foo';
compact('a', 'b');
// Notice: compact(): Undefined variable: b
Same site cookie rfc
此更改不仅添加了新参数, 它也以不变的方式更改了 setcookie
, setrawcookie
和 session_set_cookie_params
函数的工作方式。
它们现在不再支持已经庞大的函数,而是支持一系列选项,同时仍向后兼容。 一个例子:
bool setcookie(
string $name
[, string $value = ""
[, int $expire = 0
[, string $path = ""
[, string $domain = ""
[, bool $secure = false
[, bool $httponly = false ]]]]]]
)
bool setcookie (
string $name
[, string $value = ""
[, int $expire = 0
[, array $options ]]]
)
// Both ways work.
字符串搜索函数 README
您不能再将非字符串针传递给字符串搜索函数。 这些是受影响的函数:
strpos()
strrpos()
stripos()
strripos()
strstr()
strchr()
strrchr()
stristr()
链接:https://www.learnfk.com/article-new-in-php-73
来源:Learnfk无涯私塾网