【问题标题】:PHP Difference between array() and []数组()和[]之间的PHP区别
【发布时间】:2013-07-20 07:12:11
【问题描述】:

我正在编写一个 PHP 应用程序,我想确保它可以正常工作。

原代码:

<?php
$data = array('name' => 'test',
              'id'   => 'theID');

echo form_input($data);
?>

以下是否可以正常工作或由于某种原因不推荐?

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

有什么不同吗?

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

另外,短 php 标签&lt;?= ?&gt; 是否适合回显?有版本问题吗? (提供在 php.ini 中启用)

【问题讨论】:

  • PHP 5.4 中引入了短数组语法,没有区别,旧方法不会被删除,因此使用起来也很安全。短标签通常不受欢迎,我不会使用它们。
  • Tks,关于不使用 php 短标签的任何参考/原因?
  • 虽然 = ?> 实际上并不被视为短标签,但它们并没有被标准短标签禁用 afaik,因此它们对于简单的回声应该没问题。
  • 阅读 = ?> 标签很有趣。根据其中一位 cmets 的说法,“Rasmus Lerdorf 本人做出了这样的承诺”programmers.stackexchange.com/questions/151661/…

标签: php arrays syntax square-bracket


【解决方案1】:

PHP >= 5.4 支持以下[]

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

这只是一个简短的语法,在 PHP 。

【讨论】:

  • 似乎 5.3.24 也支持这种语法。 (无法直接确认)
  • 你有什么不同吗?
  • @CooPer,不,除非你计算打字长度。
  • 我想要一个参考并找到了这个-php.net/manual/en/language.types.array.php-“从 PHP 5.4 开始,您还可以使用短数组语法,它将 array() 替换为 []。”
  • @Prof83,您可以使用$data = new stdClass();$data-&gt;someProp = 'someValue'; 使用PHP 标准类和$obj = (object) ['foo'=&gt;'bar', 'baz'=&gt;'biz']; 将数组(使用显式类型转换)转换为对象(stdClass),但关于{},它可以在未来实施,但不确定 :-)
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    使用 php 7.2,对我来说似乎不是 [我是一个数组] {我是一个数组似乎可以工作}。区别在于{}[]。我的代码

    <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>
    

    【讨论】:

    • PHP 在哪里?您正在编写 HTML。
    • 此外,花括号不适用于 OP 询问的情况。您不能使用花括号创建数组,只能访问数组元素(从 v5.4 到现在 - v7.3)。
    【解决方案4】:

    截至 2019 年,[] 语法添加至今已有 7 年。在我看来,这足以删除 array(),除非在旧的遗留程序中。

    【讨论】:

    • @TheAlpha 好吧,即使在今天,我也很想知道是否存在性能差异
    • 你测量了吗?我认为它们只是替代语法,不应该是可测量的。
    • @Cid 出于某种原因,我在使用 [ ] 语法时在 php 7.4.9 中看到更高的 memory_get_peak_usage();
    • 在 PHP 中测量内存使用非常困难,因为内存使用涉及多层缓存和优化。准确的测量需要找出如何禁用所有这些优化(如果可能的话),或者测量两种情况比较一次并丢弃结果(这将显示人为的高内存使用情况),然后交替测量两种情况并取平均值每个案例的测量值。 [] 和 array() 之间的唯一区别是语法,因为 [] 是 array() 的缩写。
    【解决方案5】:

    关于问题的&lt;?= ?&gt; 部分:基本上不赞成,至少在 2019 年不会。

    1. 一个很好的技术故障:https://softwareengineering.stackexchange.com/questions/151661/is-it-bad-practice-to-use-tag-in-php
    2. PSR-1 中的注释:文件必须仅使用 &lt;?php&lt;?= 标签。
    3. TL;DR:您没有理由不能或不应该使用它。

    【讨论】:

      猜你喜欢
      • 2013-09-13
      • 1970-01-01
      • 2013-08-11
      • 2017-05-28
      • 1970-01-01
      • 1970-01-01
      • 2011-11-23
      • 2010-10-26
      • 2011-04-04
      相关资源
      最近更新 更多