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

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

当前回答

不要这样做:

$arrTst = array( 'IdxKeyOne' => null, 'IdxKeyTwo' => null, 'IdxKeyThr' => null );

不存在使用虚拟/占位符值“初始化”数组的索引键这样的事情。print_r给:

Array (
  [IdxKeyOne] => 
  [IdxKeyTwo] => 
  [IdxKeyThr] => 
)

元素存在的地方,有定义的键但值为空。在以后使用该数组时,无论如何都必须删除假行。

其他回答

初始化一个简单数组:

<?php $array1=array(10,20,30,40,50); ?>

在array中初始化array:

<?php  $array2=array(6,"santosh","rahul",array("x","y","z")); ?>

来源:源代码

在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语法))的支持实现的影响。

在PHP中数组就是数组;这里没有对原语和对象的考虑,因此没有可比的优化。

不要这样做:

$arrTst = array( 'IdxKeyOne' => null, 'IdxKeyTwo' => null, 'IdxKeyThr' => null );

不存在使用虚拟/占位符值“初始化”数组的索引键这样的事情。print_r给:

Array (
  [IdxKeyOne] => 
  [IdxKeyTwo] => 
  [IdxKeyThr] => 
)

元素存在的地方,有定义的键但值为空。在以后使用该数组时,无论如何都必须删除假行。

试试这个:

    $arr = (array) null;
    var_dump($arr);

    // will print
    // array(0) { }