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

15 浏览
0 Comments

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

在某些其他语言(例如AS3),有人指出如果像这样初始化一个新数组var foo = []而不是var foo = new Array(),那么速度更快,原因是对象的创建和实例化。我想知道在PHP中是否有类似的等效方法?

class Foo {
    private $arr = array(); // 是否有其他/更好的方法?
}

0
0 Comments

PHP中初始化(空)数组的最佳方式是什么?

在PHP中,可以使用以下方式创建一个空数组:

$myArray = [];

你可以随后将值推入数组中,如下所示:

$myArray[] = "tree";
$myArray[] = "house";
$myArray[] = "dog";

此时,$myArray包含"tree"、"house"和"dog"。上述命令中的每个都会附加到数组中,保留已有的项。

对于来自其他编程语言的开发者来说,这种附加到数组的方式可能有些奇怪。他们可能期望需要做类似于`$myArray += "dog"`这样的操作,或者像Visual Basic集合那样使用"add()"方法。但是,这种直接附加的语法确实简洁方便。

你可以使用unset()函数来删除数组中的项:

unset($myArray[1]);

...会从数组中删除"house"(数组是从0开始计数的)。

unset($myArray);

...会销毁整个数组。

需要明确的是,使用空方括号的语法来附加到数组中只是一种告诉PHP自动为每个值分配索引的方式,而不是你手动分配索引。在底层,PHP实际上是这样做的:

$myArray[0] = "tree";
$myArray[1] = "house";
$myArray[2] = "dog";

你可以根据需要手动分配索引,并且可以使用任何数字。你还可以为某些项分配索引号,而不为其他项分配。如果这样做,PHP将填充缺失的索引号,从分配的最大索引号递增。

因此,如果你这样做:

$myArray[10] = "tree";
$myArray[20] = "house";
$myArray[] = "dog";

...项"dog"将被赋予索引号21。PHP不会对递增索引号进行智能的模式匹配,因此它不知道你可能希望它将索引号30分配给"dog"。你可以使用其他函数来指定数组的递增模式,这里不再详述,但所有内容都在PHP文档中有详细说明。

需要注意的是,$ary = []只适用于PHP 5.4及更高版本。然而,从性能的角度来看,[]与array()之间没有优势。

对于较早版本的PHP,可以使用array_push()函数。不清楚这是否会影响性能。

你误解了某人的观点。在旧版本的PHP中,`$array[] = 'foo'`完全正常。只有在5.4中才有`$array = [];`初始化数组的功能。

公平地说,这实际上回答了提问者的问题。

哈哈...我的脑袋都炸了。几十年的PHP编程,我才学到不需要使用array_push。

我甚至不明白为什么这不是被接受的答案。

0
0 Comments

在PHP中,初始化一个空数组有两种方法:使用array()构造函数和使用[]数组字面量语法。在ECMAScript实现中(例如ActionScript或JavaScript),Array()是一个构造函数,而[]是数组字面量的一部分。这两种方法在执行方式上有很大的差异,数组字面量的语法没有调用函数的开销。

然而,PHP有一些看起来像函数但并不被视为函数的语言结构。即使在支持[]作为替代语法的PHP 5.4中,由于编译器/解析器认为它们是完全等效的,它们之间并没有性能上的差异。

如果你需要支持旧版本的PHP,可以使用前一种语法。从可读性的角度来看,也有人认为[]更自然。当我刚开始学习PHP时,我曾经犯过使用[]来初始化数组的错误。

最初,有人提议对PHP进行这种语言上的变化,但是由于核心开发人员的多数投票反对,这个变化被拒绝了。然而,在5.4版本上出现了一个心情改变,可能是受到了对流行数据库(如MongoDB)的支持实现的影响,这些数据库使用了ECMAScript语法。

所以,对于$array = [];$array = array();哪个更好的问题,这是个人偏好的问题。它们在功能上完全相同,只是[]更容易输入。

尽管[]语法普遍受到青睐,但重要的是要注意,仍然有很多主机仅使用PHP 5.3。如果你想分发你的代码,[]语法将导致致命错误。

所以,如果你正在开发一款可以在任何主机上使用而不仅仅是为自己使用的软件,请不要使用新的语法!

0
0 Comments

在PHP 5.4之前,初始化一个空数组的最佳方法是使用$myArray = array();语法。然而,从PHP 5.4开始,可以使用更简洁的$myArray = [];语法来实现相同的效果。

这个问题的出现是因为在不同的PHP版本中,数组的初始化语法存在差异。在PHP 5.4之前的版本中,使用array()来初始化空数组是最佳实践。然而,随着PHP 5.4的发布,引入了更简洁的初始化语法[],因此在PHP 5.4及更高版本中,使用[]来初始化空数组是更好的选择。

为了解决这个问题,我们需要根据所使用的PHP版本选择适当的初始化语法。如果我们在PHP 5.4之前的版本中使用[]来初始化空数组,可能会导致语法错误。同样地,在PHP 5.4及更高版本中使用array()来初始化空数组也是有效的,但不再是最佳实践。

因此,为了确保代码的兼容性和可读性,我们应该根据所使用的PHP版本来选择适当的初始化语法。如果我们的代码需要在较旧的PHP版本中运行,我们应该使用array(),而在PHP 5.4及更高版本中,我们应该使用[]来初始化空数组。这样可以确保我们的代码在不同的PHP环境中都能正常运行。

0