Różnica PHP między array () a []

148

Piszę aplikację PHP i chcę się upewnić, że będzie działać bez błędów.

Oryginalny kod:

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

echo form_input($data);
?>

Czy poniższe elementy działałyby bez błędów lub z jakiegoś powodu nie są zalecane?

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

Czy jest jakaś różnica?

Ponownie spojrzałem na dane array()i metodę krótkiej tablicy z nawiasami kwadratowymi []w PHP.net, ale nie jestem pewien.

A także, czy krótki tag php nadaje się <?= ?>do echa? Czy jest jakiś problem z wersją? (pod warunkiem, że jest włączony w php.ini)

Panie Web
źródło
1
Składnia krótkich tablic została wprowadzona w PHP 5.4, nie ma różnicy, a stara metoda nie zostanie usunięta, więc można ją bezpiecznie używać. Krótkie tagi są zwykle źle widziane, nie użyłbym ich.
JimL,
2
Tks, jakieś odniesienie / powód, aby nie używać krótkich tagów PHP?
Pan Web,
7
Chociaż <? =?> W rzeczywistości nie są uważane za shorttagi, nie są wyłączane przez standardowe shorttagi afaik, więc powinny być w porządku dla prostych ech.
Alexander Varwijk,
1
Ciekawa lektura tagów <? =?>. Według jednego z komentarzy "Rasmus Lerdorf sam uczynił to bardzo zaangażowanym" programmers.stackexchange.com/questions/151661/…
johnsnails

Odpowiedzi:

223

Następujące []jest obsługiwane w PHP> = 5.4:

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

To jest tylko krótka składnia i w PHP <5.4 nie będzie działać .

Alpha
źródło
Wygląda na to, że 5.3.24 obsługuje również tę składnię. (nie udało się bezpośrednio potwierdzić)
Alberto
3
czy jest jakaś różnica?
Ali Akbar Azizi
26
@CooPer, nie, chyba że policzysz długość pisania.
Alpha,
7
Chciałem uzyskać odniesienie i znalazłem to- php.net/manual/en/language.types.array.php - „Od PHP 5.4 możesz również użyć składni krótkich tablic, która zamienia array () na [].”
mrwaim
1
@ Prof83 może korzystać $data = new stdClass();$data->someProp = 'someValue';za pomocą PHPstandardowego klasę i $obj = (object) ['foo'=>'bar', 'baz'=>'biz'];przekonwertować tablicę (przy użyciu wyraźnej typu odlew) do obiektu (stdClass), ale odnoszące się do {}, to może być realizowane w przyszłości, ale nie jestem pewien tho :-)
Alpha
19

Od 2019 roku minęło 7 lat od []dodania składni. array()Moim zdaniem jest to wystarczająco dużo czasu, aby zniknąć, z wyjątkiem starszych programów.

David Spector
źródło
3
@TheAlpha cóż, nawet dzisiaj byłem ciekawy, czy są różnice w wydajności
Cid
Czy zmierzyłeś? Zakładam, że są to po prostu alternatywna składnia, której nie można mierzyć.
David Spector
6

Jeśli używasz wersji 5.3 lub poprzedniej, nie możesz używać zarówno []jako tablicy, jak i tablicy asocjacyjnej. Jeśli używasz 5.4 lub nowszej wersji PHP następnie można użyć jednej array()lub []utworzyć tablicę asocjacyjną, czy nawet tablicy wielowymiarowej.

Md. A. Barik
źródło
1

A jeśli chodzi o <?= ?>część pytania: w dużej mierze nie jest to mile widziane, przynajmniej nie w 2019 roku.

  1. Dobry zestawienie techniczne: /software/151661/is-it-bad-practice-to-use-tag-in-php
  2. Uwaga w PSR-1 : Pliki MUSZĄ używać tylko <?phpi <?=tagów.
  3. TL; DR: Nie ma powodu, dla którego nie możesz lub nie powinieneś go używać.
Aydin4ik
źródło
-12

Używając php 7.2, wydaje mi się, że raczej wtedy [Jestem tablicą] {Jestem tablicą wydaje się działać}. Różnica jest między {}a []. Mój kod

<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>
Mahad Ali
źródło
15
Gdzie jest PHP? Piszesz HTML.
domdambrogia,
1
Ponadto nawiasy klamrowe NIE będą działać w przypadku, o który pytał OP. Nie można utworzyć tablicy z nawiasami klamrowymi, można tylko uzyskać dostęp do elementów tablicy (od wersji 5.4 do teraz - wersja 7.3).
Aydin4ik