我通常使用php的compact()
函数从变量构建数组。另外,我可以手动创建该数组。这些用法有任何优点或缺点吗?我将在以下部分中分享这两个声明的示例:
紧凑型使用
<?php
$name = "John";
$surname = "Doe";
compact('name','surname');
?>
输出:
['name'=>'John','surname'=>'Doe']
手动数组声明
<?php
$name = "John";
$surname = "Doe";
$data = array("name"=>$name,"surname"=>$surname);
?>
输出:
['name'=>'John','surname'=>'Doe']
答案 0 :(得分:16)
compact()
曾经是打印变量数组的便捷快捷方式。
然而如今,当我们在 PHP 中拥有 PHPStan、Rector、IDE 和严格类型时,使用 Compact 为静态分析和 IDE 自动完成带来了巨大的障碍。
使用显式变量 (2.) 使您的 IDE 和其他工具能够了解类型,并帮助您进行代码自动完成、静态分析和自动重构。
compact()
function getValues(...) {
$name = 'Elon';
$surname = 'Musk';
return compact('name','surname');
}
$items = getValues();
getValues()
的返回类型是 mixed[]
$name
和 $surname
foreach ($items as $item)
{
$item->? // it's mixed
}
function getValues(...) {
$name = 'Elon';
$surname = 'Musk';
return [
'name' => $name,
'surname' => $surname,
]);
}
$items = getValues();
getValues()
的返回类型是 array<string, string>
foreach ($items as $item)
{
$item->? // it's a string
}
答案 1 :(得分:14)
我认为这更属于偏好。
如果我声明了一堆局部变量,并且我碰巧希望我的数组键以相同的方式命名,compact
非常有帮助。
我不经常发现这种情况。通常我会定义一个更复杂的数组:
$array = [
'foo' => $something->foo(),
'bar' => $bar,
'baz' => A_CONSTANT
];
要在此使用compact
,您必须首先定义变量$foo
$bar
和$baz
,这似乎很愚蠢。
我喜欢compact
,我发现大多数时候我都没有发现它有用。
好的我必须去做。这是一个非常基本的非科学性能比较:
简而言之,使用compact
的速度要慢一个数量级。
然而,你必须使用它100,000(在这个例子中)只需要很短的一秒钟。
换句话说:使用对您的代码最有意义的东西。不要担心性能差异极小!