Разница PHP между array () и []


148

Я пишу приложение на PHP и хочу убедиться, что оно будет работать без ошибок.

Оригинальный код:

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

echo form_input($data);
?>

Будет ли следующее работать без ошибок или не рекомендуется по какой-то причине?

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

Есть ли разница?

Я снова посмотрел данные array()и метод короткого массива в квадратных скобках []в PHP.net, но я не уверен.

А также, подходит ли короткий php тег <?= ?>для отображения? Есть ли проблема с версией? (включено в php.ini)


1
Синтаксис коротких массивов был введен в PHP 5.4, различий нет, и старый метод не будет удален, поэтому его также можно использовать безопасно. Короткие метки обычно не одобряются, я бы их не использовал.
JimL

2
Ткс, какие-либо ссылки / причины не использовать короткие теги PHP?
Mr.Web

7
Хотя <? =?> На самом деле не считаются шорттегами, они не отключаются стандартными шортегами afaik, поэтому они должны подойти для простых эхо-сигналов.
Александр Varwijk


1
Интересно читать по тегам <? =?>. Согласно одному из комментариев «Расмус Лердорф сам совершил это» programmers.stackexchange.com/questions/151661/…
johnsnails

Ответы:


223

Следующее []поддерживается в PHP> = 5.4:

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

Это только короткий синтаксис, и в PHP <5.4 он не будет работать .


Кажется, 5.3.24 также поддерживает этот синтаксис. (не могу подтвердить напрямую)
Альберто

3
есть ли разница?
Али Акбар Азизи

26
@CooPer, нет, если не считать длину набора.
Альфа

7
Я хотел ссылку и нашел это: php.net/manual/en/language.types.array.php - «Начиная с PHP 5.4 вы также можете использовать синтаксис короткого массива, который заменяет array () на []».
mrwaim

1
@ Prof83, Вы можете использовать с $data = new stdClass();$data->someProp = 'someValue';помощью PHPстандартного класса и $obj = (object) ['foo'=>'bar', 'baz'=>'biz'];преобразовать массив (используя явное приведение типа) к объекту (StdClass) А о {}, это может быть реализовано в будущем , но не уверен Тхо :-)
Альфа

19

По состоянию на 2019 год прошло 7 лет с момента []добавления синтаксиса. На array()мой взгляд, этого достаточно, чтобы отбросить, за исключением старых унаследованных программ.


3
@TheAlpha хорошо, даже сегодня мне было любопытно узнать, были ли различия в производительности
Cid

Вы измерили? Я предполагаю, что это просто альтернативный синтаксис, который не должен быть измеримым.
Дэвид Спектор

6

Если вы используете 5.3 или предыдущую версию, вы не можете использовать []как массив, так и как ассоциативный массив. Если вы используете 5.4 или более позднюю версию PHP , то вы можете использовать либо array()или []создать массив, ассоциативный массив или даже многомерный массив.


1

А что касается <?= ?>части вопроса: это в значительной степени не осуждается, по крайней мере, не в 2019 году.

  1. Хорошая техническая разбивка: /software/151661/is-it-bad-practice-to-use-tag-in-php
  2. Запись в PSR-1 : Файлы должны использовать только <?phpи <?=теги.
  3. TL; DR: нет причин, по которым вы не можете или не должны ими пользоваться.

-13

Используя 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>

15
Где находится PHP? Вы пишете HTML.
Домдамброджа

1
Кроме того, фигурные скобки НЕ будут работать для случая, о котором спрашивал OP. Вы не можете создать массив с помощью фигурных скобок, а только получить доступ к элементам массива (начиная с v5.4 и до настоящего времени - v7.3).
Aydin4ik
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.