Perbedaan PHP antara array () dan []

148

Saya sedang menulis aplikasi PHP dan saya ingin memastikan itu akan berfungsi tanpa kesalahan.

Kode asli:

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

echo form_input($data);
?>

Apakah yang berikut ini berfungsi tanpa kesalahan atau tidak disarankan karena alasan tertentu?

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

Apakah ada perbedaan?

Saya telah melihat kembali data tentang array()dan metode array pendek dengan tanda kurung []di PHP.net tapi saya tidak yakin.

Dan juga, apakah tag php pendek <?= ?>baik untuk digaungkan? Apakah ada masalah versi? (disediakan diaktifkan di php.ini)

Mr.Web
sumber
1
Sintaks array pendek diperkenalkan di PHP 5.4, tidak ada perbedaan dan metode lama tidak akan dihapus, jadi aman untuk digunakan. Tag pendek biasanya disukai, saya tidak akan menggunakannya.
JimL
2
Tks, ada referensi / alasan tidak menggunakan tag pendek php?
Mr.Web
7
Meskipun <? =?> Sebenarnya tidak dianggap sebagai shorttag, mereka tidak dinonaktifkan dengan afaik shorttag standar sehingga mereka seharusnya baik untuk gema sederhana.
Alexander Varwijk
1
Bacaan menarik pada tag <? =?>. Menurut salah satu komentar "Rasmus Lerdorf sendiri yang membuatnya sangat berkomitmen" programmer.stackexchange.com/questions/151661/…
johnsnails

Jawaban:

223

Berikut []ini didukung dalam PHP> = 5.4:

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

Ini hanya sintaks pendek dan dalam PHP <5,4 itu tidak akan berfungsi .

Alfa
sumber
Tampaknya 5.3.24 mendukung sintaks ini juga. (tidak dapat mengkonfirmasi secara langsung)
Alberto
3
apakah ada bedanya?
Ali Akbar Azizi
26
@ CoPer, Tidak, kecuali Anda menghitung panjang pengetikan.
The Alpha
7
Saya ingin referensi dan menemukan ini- php.net/manual/en/language.types.array.php - "Pada PHP 5.4 Anda juga dapat menggunakan sintaks array pendek, yang menggantikan array () dengan []."
mrwaim
1
@ Prof83, Anda dapat $data = new stdClass();$data->someProp = 'someValue';menggunakan PHPkelas standar dan $obj = (object) ['foo'=>'bar', 'baz'=>'biz'];untuk mengkonversi array (menggunakan tipe eksplisit casting) ke objek (stdClass) tetapi mengenai {}, itu bisa diimplementasikan di masa depan tetapi tidak yakin tho :-)
The Alpha
19

Pada 2019, sudah 7 tahun sejak []sintaks ditambahkan. Itu cukup lama untuk dihapus array()kecuali dalam program lawas lama, menurut saya.

David Spector
sumber
3
@TheAlpha yah, bahkan hari ini, saya ingin tahu apakah ada perbedaan kinerja
Cid
Apakah Anda mengukur? Saya menganggap mereka hanya sintaks alternatif, yang seharusnya tidak dapat diukur.
David Spector
6

Jika Anda menggunakan versi 5.3 atau sebelumnya maka Anda tidak bisa menggunakan []sebagai array maupun asosiatif array. Jika Anda menggunakan versi PHP 5.4 atau yang lebih baru maka Anda dapat menggunakan salah satu array()atau []untuk membuat array, array asosiatif atau bahkan array multidimensi.

Md A. Barik
sumber
1

Dan mengenai <?= ?>bagian dari pertanyaan: sebagian besar tidak disukai, setidaknya tidak pada 2019.

  1. Rincian teknis yang baik: /software/151661/is-it-bad-practice-to-use-tag-in-php
  2. Catatan dalam PSR-1 : File HARUS hanya digunakan <?phpdan <?=tag.
  3. TL; DR: Tidak ada alasan Anda tidak dapat atau tidak seharusnya menggunakannya.
Aydin4ik
sumber
-13

Menggunakan php 7.2, bagi saya sepertinya bukan [saya sebuah array] {I am array tampaknya berfungsi}. Perbedaan antara {}dan []. Kode saya

<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
sumber
15
Di mana PHP-nya? Anda sedang menulis HTML.
domdambrogia
1
Juga, kurung kurawal TIDAK akan berfungsi untuk kasus yang ditanyakan OP. Anda tidak dapat membuat array dengan kurung kurawal, hanya mengakses elemen array (sejak v5.4 hingga sekarang - v7.3).
Aydin4ik