PHP:使用"new"和没有它来初始化数组之间的区别是什么?

mat*_*pie 12 php arrays initialization

我总是通过填充它们来创建数组

$foo[] = 'car';
Run Code Online (Sandbox Code Playgroud)

但我见过很多

$foo = array();
$foo[] = 'car';
Run Code Online (Sandbox Code Playgroud)

$foo = new array();
Run Code Online (Sandbox Code Playgroud)

不初始化,使用array()和使用new array()之间有什么区别;?

谢谢!

bco*_*sca 21

您不使用以下方法在PHP中实例化数组:

$foo=new array(); // error in PHP
Run Code Online (Sandbox Code Playgroud)

这是为Javascript:

foo=new Array(); // no error in Javascript
Run Code Online (Sandbox Code Playgroud)

在PHP中,new仅用于实例化对象.

  • +1.就像要指出的那样*"在PHP中,new仅用于实例化对象."*...在Javascript中,它只是"Array"是Javascript中的一个对象,而在PHP中,它是一个有序的映射(某些东西) Javascript没有说,因为JS中的有序映射是一个对象). (4认同)

JAL*_*JAL 10

区别在于使用new不起作用,因为它array()是一种语言结构而不是一个对象构造函数.它抛出一个错误:

Parse error: syntax error, unexpected T_ARRAY in php shell code on line 1
Run Code Online (Sandbox Code Playgroud)

另一方面,声明它

$f=array();
Run Code Online (Sandbox Code Playgroud)

在开始分配项目之前是一个很好的做法.严格的错误报告模式可能会发出有关使用未声明变量的警告.


zzz*_*Bov 5

您可以使用new关键字在PHP中实例化一个数组,但它比使用该array()函数创建的数组稍微庞大,并且不使用相同的调用.

new ArrayObject();
Run Code Online (Sandbox Code Playgroud)

将数组实例化为对象.更重要的是,这是一个可扩展的类,如果你想在面向对象的PHP中使用一个对象的数组语法.在大多数情况下,建议只使用array()速度和简单性.

编辑:我想我从未真正回答过这个问题.

$var = array();
$var[] = 'car';
Run Code Online (Sandbox Code Playgroud)

将创建一个新的空数组,然后将'car'追加到数组中.初始化任何和所有数组都是很好的形式.将这两行写成一条会更好:$var = array('car');

$var[] = 'car';
Run Code Online (Sandbox Code Playgroud)

如果$var不是数组或为空,将在其中创建一个带有'car'的新数组.如果$var恰好已经声明为数组,您可能会发现您不小心保留了一些较旧的值(这就是初始化数组的好方法).

$var = new ArrayObject();
$var[] = 'car';
Run Code Online (Sandbox Code Playgroud)

是声明数组的OOP方式.这需要更多的资源,所以array()除非你有充分的理由使用它ArrayObject

注意:

增加未初始化的数字变量要比递增初始化的数字变量($i++慢于$i = 0; $i++)慢得多.这不是php中的数组的情况:( $var[] = 'car'大致相同$var = array(); $var[] = 'car')