compact()
即将到来的 PHP8 的扩展运算符和它的预先存在的函数有什么区别?
$data = new CustomerData(...$input);
紧凑的 PHP 函数:
compact — 创建包含变量及其值的数组
<?php
$city = "San Francisco";
$state = "CA";
$event = "SIGGRAPH";
$location_vars = array("city", "state");
$result = compact("event", $location_vars);
print_r($result);
?>
哪个输出:
Array
(
[event] => SIGGRAPH
[city] => San Francisco
[state] => CA
)
阵列传播:
而数组扩展合并两个或多个数组而不向其值添加键(关联数组):
$arr1 = [1, 2, 3];
$arr2 = [...$arr1]; //[1, 2, 3]
$arr3 = [0, ...$arr1]; //[0, 1, 2, 3]
$arr4 = array(...$arr1, ...$arr2, 111); //[1, 2, 3, 1, 2, 3, 111]
$arr5 = [...$arr1, ...$arr1]; //[1, 2, 3, 1, 2, 3]
还可以使用数组扩展来填充方法调用的参数,假设您的类有这个构造函数:
class CustomerData
{
public function __construct(
public string $name,
public string $email,
public int $age,
) {}
}
并使用数组传播来创建CustomerData
对象:
$input = [
'age' => 25,
'name' => 'Brent',
'email' => 'brent@stitcher.io',
];
$data = new CustomerData(...$input);
这与以下行为相同:
$input = [
'age' => 25,
'name' => 'Brent',
'email' => 'brent@stitcher.io',
];
$data = new CustomerData($input['age'], $input['name'], $input['email']);
PHP 从 5.6 开始就已经支持参数解包(AKA 扩展运算符)。该 RFC 建议将此功能引入数组表达式。
自 PHP 7.4 起也实现了数组表达式中的扩展运算符。
资料来源:
来自:PHP 8:命名参数
命名参数允许基于参数名称而不是参数位置将参数传递给函数。这使得参数的含义自文档化,使参数顺序独立,并允许任意跳过默认值
class CustomerData
{
public function __construct(
public string $name,
public string $email,
public int $age,
) {}
}
$data = new CustomerData(
name: $input['name'],
email: $input['email'],
age: $input['age'],
);