2011-10-09 60 views
3

我想知道PHP如何处理匿名数组,如果我做这样使用它foreach循环:匿名数组与PHP

foreach(array('a', 'b') as $foo) { 
    // ... 
} 

如果数组被每一步重建这是行不通的 - 但它有效,所以看起来PHP为该数组创建了一个变量(或者类似的东西,其实并不重要) - 这意味着这实际上不会有糟糕的性能。但是,有没有为什么不使用匿名数组与foreach循环? (它有点“看起来错/糟糕”给我)

+0

不是你的问题的一个问题,但是这个代码也让我感到困惑:P。我会使用array-map(http://php.net/manual/en/function.array-map.php)来避免这种情况:P – Nanne

+0

我认为'foreach'中匿名数组的最佳示例是:'foreach(range('a','z')as $ char){}' – ComFreek

+1

“PHP为该数组创建了一个变量(或类似的东西,其实并不重要)” - 它的确如此,无所谓 - 如果您将其存储在命名数组中,您将创建一个。 – Eric

回答

2

这是一个非常正常的数组,而且应该工作。

你的术语很怪异,匿名对函数有意义,因为通常有名称,但对于数组?如果您不直接将其分配给变量,是整数匿名吗? :) Nah ..

+1

是的,我知道这个命名问题,但想不出一个更好的(适当的)形容词。有什么建议么? – Niko

+0

我的观点是:不需要形容词,因为*没有什么特别的事情正在发生。真。想想看。它就像'$ x = 1; $ Y = 2; $ z = $ x + $ y' vs'$ z = 1 + 2'。你不知道你可以直接在那里写'2'而不用将它分配给一个变量。或'foreach(functionreturninganarray()as $ foo)'...... –

+0

这正是我的问题所在 - 如果有任何区别。没看清楚,谢谢你指出! – Niko

5

我没有看到一个不使用它的理由。

无论您是使用直接初始化的数组还是使用数组变量作为参数为foreach。它们都是有效的参数,没有理由认为匿名数组的处理方式不同。

从代码维护的角度来看,它也完全清楚这里正在做什么,所以也没有可读性问题。

+5

通过避免使用临时数组变量,您还可以减少变量范围的污染。这是一个小问题,但也是一个很好的副作用。 –