PHP Різниця між масивом () та []


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
Tks, будь-яка посилання / причина щодо не використання коротких тегів php?
Mr.Web

7
Хоча <? =?> Насправді не вважаються ярликами, вони не вимкнені зі стандартними штрихами afaik, тому вони повинні бути нормальними для простого відлуння.
Олександр Варвейк


1
Цікаво читати на тегах <? =?>. Згідно з одним із коментарів, "Расмус Лердорф сам домігся цього" програмісти.stackexchange.com
questions/151661/…

Відповіді:


223

Наступне []підтримується в PHP> = 5.4:

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

Це лише короткий синтаксис, і в PHP <5.4 він не працюватиме .


Здається, 5.3.24 також підтримує цей синтаксис. (не вдалося підтвердити безпосередньо)
Альберто

3
У тебе різниця?
Алі Акбар Азізі

26
@CooPer, Ні, якщо ви не рахуєте довжину введення тексту.
Альфа

7
Я хотів посилання та знайшов this- php.net/manual/en/language.types.array.php - "Станом на PHP 5.4 ви також можете використовувати синтаксис короткого масиву, який замінює масив () на []."
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 або попередню версію, ви не можете використовувати []як масив, так і асоціативний масив. Якщо ви використовуєте версію PHP 5.4 або пізнішої версії, ви можете використовувати array()або []створити масив, асоціативний масив або навіть багатовимірний масив.


1

А щодо <?= ?>частини питання: вона значною мірою не нахмурена, принаймні не у 2019 році.

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

-12

Використовуючи 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.
domdambrogia

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