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