在 PHP 中初始化(空)数组的最佳方法

新手上路,请多包涵

在某些其他语言(例如 AS3)中,由于对象创建和实例化的原因,已经注意到如果像这样 var foo = [] 而不是 var foo = new Array() 那样初始化新数组会更快。我想知道PHP中是否有任何等价物?

 class Foo {
    private $arr = array(); // is there another / better way?
}

原文由 Tom Auger 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 657
2 个回答

在 ECMAScript 实现(例如,ActionScript 或 JavaScript)中, Array() 是构造函数,而 [] 是数组文字语法的一部分。两者都以完全不同的方式进行优化和执行,字面语法不受调用函数的开销的困扰。

另一方面,PHP 具有可能看起来像函数但不被视为函数的语言结构。即使使用支持 [] 作为替代方案的 PHP 5.4,开销也没有区别,因为就编译器/解析器而言,它们完全是同义词。

 // Before 5.4, you could only write
$array = array(
    "foo" => "bar",
    "bar" => "foo",
);

// As of PHP 5.4, the following is synonymous with the above
$array = [
    "foo" => "bar",
    "bar" => "foo",
];

如果您需要支持旧版本的 PHP,请使用以前的语法。还有一个关于可读性的论点,但作为一名长期的 JS 开发人员,后者对我来说似乎很自然。当我第一次学习 PHP 时,我实际上犯了一个错误,即尝试使用 [] 初始化数组。

由于核心开发人员的多数票反对,最初提出并拒绝了对语言的这种 更改,原因如下:

这个补丁将不会被接受,因为核心开发者的投票反对。尽管如果您在核心开发人员和用户空间投票之间进行累积平均值似乎表明相反,从长远来看,提交一个不支持或不维护的补丁是不负责任的。

然而,在 5.4 之前似乎发生了改变,这可能是受支持流行数据库(如 MongoDB)(使用 ECMAScript 语法)的实现的影响。

原文由 Andy E 发布,翻译遵循 CC BY-SA 3.0 许可协议

在 PHP 5.4 之前:

 $myArray = array();

PHP 5.4 及更高版本

$myArray = [];

原文由 Md. Shafiqur Rahman 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题