方法和变量声明中的PHP数组vs []

Die*_*itz 53 php standards

我对PHP语法有疑问.

在定义函数和变量时,我应该使用哪种约定?

我知道他们在实践中做了同样的事情,但我想知道哪种方法符合最佳实践标准.

变量

public $varname = array();
Run Code Online (Sandbox Code Playgroud)

要么

public $varname = [];
Run Code Online (Sandbox Code Playgroud)

方法

public function foo($bar = array()){}
Run Code Online (Sandbox Code Playgroud)

要么

public function foo($bar = []){}
Run Code Online (Sandbox Code Playgroud)

Bre*_*hse 63

PSR-2(由PHP Framework Interoperability Group提供)未提及短数组语法.但正如您在第4.3章中所看到的,它们使用短数组语法将默认值设置为$arg3空数组.

因此,对于PHP> = 5.4,短阵列语法似乎是事实上的标准.array()如果您希望脚本在PHP <5.4上运行,请仅使用.


Nit*_*eli 22

来自PHP 文档:

从PHP 5.4开始,您还可以使用短数组语法,它将array()替换为[].

<?php
$array = array(
    "foo" => "bar",
    "bar" => "foo",
);

// as of PHP 5.4
$array = [
    "foo" => "bar",
    "bar" => "foo",
];
?>
Run Code Online (Sandbox Code Playgroud)

如果您尝试在早于5.4的版本中使用'[]'表示法,它将失败,PHP将抛出一个 syntax error

为了向后兼容,您应该使用array()语法.

  • 我认为它回答了这个问题,试图在5.4之前的版本中使用'[]'表示法是不可能的,也是不可能的. (4认同)
  • 问题是"我应该使用哪种约定",答案是"你应该使用array()来保持向后兼容性".它怎么不相关? (4认同)
  • 没有投票,但我根本没有看到这回答了这个问题 (3认同)

小智 7

这取决于您要定位的PHP版本.为了获得最佳的向后兼容性,我建议您使用array().如果你不关心旧版本(<PHP 5.4),我建议你使用更短的版本.


Aur*_*zeb 5

刚刚进行了测试,以了解[]如何执行vs array(),这就是我得到的

testing 1 million []s ( with $arr[] = [] )
started at : 1561298821.8754
ended at: 1561298822.6881
difference: 0.81266021728516 seconds 

testing 1 million array()s ( with array_push( $arr, array()) )
started at : 1561298822.6881
ended at: 1561298823.843
difference: 1.1549289226532 seconds 

testing 1 million []s ( again while the processor is hotter)
started at : 1561298823.8431
ended at: 1561298824.7448
difference: 0.9017219543457 seconds 
Run Code Online (Sandbox Code Playgroud)

因此[]的执行速度提高了约20%

  • 但您正在执行不同的操作(设置为空数组与 array_push),所以这不是苹果对苹果 (6认同)
  • 实际测试过并深入研究过。而且 [] 确实快了很多。这是因为 [] 现在被 PHP 视为主要运算符。array() 首先被翻译为 [] 然后被执行。 (3认同)
  • $arr[] = [] 和 array_push( $arr, array()) 执行相同的操作,将一个空数组附加到一个数组(不将数组设置为空数组),给你的帖子投票的人最有可能新手 (2认同)
  • 由于第一条评论的谬误,赞成OP的评论。但我仍然认为比较的是同一个苹果。也许更好的方法是比较 `$arr[] = []` 和 `$arr[] = array()`。如果您还希望(单独)“$arr[] = []”和“array_push($arr, [])”。 (2认同)