PHP中array()和[]的区别

189

我正在编写一款PHP应用程序,并希望确保它不会出现任何错误。

原始代码:


原始代码:
<?php
$data = array('name' => 'test',
              'id'   => 'theID');

echo form_input($data);
?>

以下代码是否存在错误或有不推荐的使用方法?

<?= form_input(['name' => 'test', 'id' => 'theID']); ?>

有什么区别吗?

我再次查看了PHP.net关于array()和使用方括号[]的短数组方法的数据,但我不确定。

另外,使用短php标签<?= ?>输出是否可以?有版本问题吗?(只要在php.ini中启用即可)


2
短数组语法是在PHP 5.4中引入的,与旧方法相比没有区别,因此可以安全地使用任一方法。通常不建议使用短标签。 - JimL
2
谢谢,不使用 PHP 短标签的任何参考/原因? - Mr.Web
8
尽管<?= ?>不被认为是短代码标记,但据我所知它们不会因为标准的短代码标记而失效,所以它们适用于简单输出。 - Alexander Varwijk
2
请参阅 http://www.php.net/manual/zh/ini.core.php#ini.short-open-tag。 - str
1
有趣的阅读关于<?= ?>标签。根据其中一条评论,“Rasmus Lerdorf本人进行了这个提交”。http://programmers.stackexchange.com/questions/151661/is-it-bad-practice-to-use-tag-in-php - johnsnails
5个回答

261

以下内容在 PHP >= 5.4 中受支持:[]

['name' => 'test', 'id' => 'theID']

这仅仅是一个简短的语法,在 PHP < 5.4 中它无法工作。


看起来5.3.24也支持这种语法。(无法直接确认) - Alberto
4
有区别吗? - Ali Akbar Azizi
32
@CooPer,不,除了打字长度外,没有别的要算。 - The Alpha
10
我想要一个参考资料,然后找到了这个网址 - http://php.net/manual/en/language.types.array.php - "从PHP 5.4开始,您还可以使用短数组语法,它将array()替换为[]"。 - mrwaim
我非常喜欢这种新的语法。我个人怀疑,但您认为他们会不会实现 { } 作为一种速记(对象)语法?但我想 (object) [...] 同样很容易。 - Prof
2
@Prof83,您可以使用PHP标准类中的$data = new stdClass();$data->someProp = 'someValue';(object) ['foo'=>'bar', 'baz'=>'biz'];将数组(使用显式类型转换)转换为对象(stdClass),但是关于{},它可能会在未来实现,但不确定 :-) - The Alpha

42
截至2022年,自从[]语法被添加以来已经过去了10年。在我看来,这足够长的时间放弃使用array(),除非是在旧的遗留程序中。

5
@TheAlpha 嗯,即使今天,我还是很好奇是否存在性能差异。 - Cid
你有进行测量吗?我认为它们只是不同的语法,不应该可测量。 - David Spector
@Cid 由于某种原因,我在使用 [ ] 语法时,在 php 7.4.9 中看到了更高的 memory_get_peak_usage(); - krylov123
2
在PHP中,由于内存使用涉及许多缓存和优化层,因此很难测量内存使用情况。准确的测量需要找出如何禁用所有这些优化(如果可能的话),或者测量比较一次并丢弃结果(这将显示人为高的内存使用情况),然后交替测量两种情况多次,并对每种情况的测量值进行平均。[]和array()之间唯一的区别是语法上的,因为[]是array()的缩写。 - David Spector
2
如果你关心 array(..)[..] 之间的性能差异,那么你应该使用另一种语言……只是说说而已。 - David Welch

6
如果您使用的是PHP 5.3或之前的版本,则不能使用[]作为数组和关联数组。 如果您使用的是PHP 5.4或更高版本,则可以使用array()[]来创建数组、关联数组甚至是多维数组。

4

-28

使用 PHP 7.2,对我来说似乎是 {I am an array seems to work} 而不是 [I am a an array]。两者之间的区别在于 {}[]。我的代码:

<p>
  <label for="post_category"> Cat 1 </label>
  <input type="checkbox" name="post_category{first}" value="cat1">
  <br />
  <label for="post_category{second}"> Cat 2 </label>
  <input type="checkbox" name="post_category" value="cat2">
</p>

30
你写的是HTML,PHP在哪里? - domdambrogia
4
另外,花括号在 OP 所询问的情况下是不起作用的。你无法用花括号创建数组,只能访问数组元素(从 v5.4 到现在的 v7.3 版本都是如此)。 - Aydin4ik
1
@Mahad Ali,也许你应该删除这个答案,因为它与问题无关。 - Mr.Web

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接