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)


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


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.


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.



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

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.