PHP array () ve [] arasındaki fark


151

Bir PHP uygulaması yazıyorum ve hatasız çalışacağından emin olmak istiyorum.

Orijinal kod:

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

echo form_input($data);
?>

Aşağıdakiler hatasız çalışır mıydı yoksa herhangi bir nedenle tavsiye edilmiyor mu?

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

Herhangi bir fark var mı?

PHP.net'te array()köşeli parantezler ile ilgili verilere ve kısa dizi yöntemine tekrar baktım []ama emin değilim.

Ve ayrıca, kısa php etiketi <?= ?>yankılama için iyi mi? Herhangi bir sürüm sorunu var mı? (sağlanan php.ini içinde etkindir)


1
Kısa dizi sözdizimi PHP 5.4'te tanıtıldı, hiçbir fark yoktur ve eski yöntem kaldırılmayacaktır, bu nedenle ikisini de kullanmak güvenlidir. Kısa etiketler genellikle hoş karşılanmaz, onları kullanmam.
JimL

2
Tks, php kısa etiketleri kullanmama konusunda herhangi bir referans / neden var mı?
Bay Web

7
<? =?> Aslında kısa etiketler olarak görülmese de, standart kısa etiketler afaik ile devre dışı bırakılmaz, bu nedenle basit ekolar için iyi olmaları gerekir.
Alexander Varwijk


1
<? =?> Etiketlerinde ilginç okuma. Yorumlardan birine göre, "Rasmus Lerdorf bu kadar taahhütte bulundu" programmers.stackexchange.com/questions/151661/…
johnsnails

Yanıtlar:


227

Aşağıdaki []PHP> = 5.4'te desteklenmektedir:

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

Bu sadece kısa bir sözdizimidir ve PHP <5.4'te çalışmaz .


Görünüşe göre 5.3.24 bu sözdizimini de destekliyor. (doğrudan teyit edemedi)
Alberto

3
herhangi bir fark var mı?
Ali Ekber Azizi

26
@CooPer, Hayır, yazım uzunluğunu saymadığınız sürece.
The Alpha

7
Bir referans istedim ve şunu buldum - php.net/manual/en/language.types.array.php - "PHP 5.4'ten itibaren, dizi () 'yi [] ile değiştiren kısa dizi sözdizimini de kullanabilirsiniz."
mrwaim

1
@ Prof83, Standart sınıfı $data = new stdClass();$data->someProp = 'someValue';kullanarak PHPve $obj = (object) ['foo'=>'bar', 'baz'=>'biz'];bir diziyi (açık tip atama kullanarak) bir nesneye (stdClass) dönüştürmek için kullanabilirsiniz {}, ancak bununla ilgili olarak , gelecekte uygulanabilir ancak emin değilsiniz :-)
The Alpha

20

2019 itibariyle, []sözdiziminin eklenmesinin üzerinden 7 yıl geçti . array()Benim görüşüme göre eski eski programlar dışında bırakılacak kadar uzun .


4
@TheAlpha iyi, bugün bile performans farklılıkları olup olmadığını merak ediyordum
Cid

Ölçtün mü? Ölçülebilir olmaması gereken basit bir alternatif sözdizimi olduklarını varsayıyorum.
David Spector

Daha yüksek bkz Nedense @Cid memory_get_peak_usage();php 7.4.9kullanırken [ ]sözdizimi.
krylov123

Bellek kullanımıyla ilgili birçok önbelleğe alma ve optimizasyon katmanı nedeniyle PHP'de bellek kullanımını ölçmek çok zordur. Doğru bir ölçüm, ya tüm bu optimizasyonların nasıl devre dışı bırakılacağını bulmayı (eğer mümkünse) ya da her iki durumu da bir kez karşılaştırmayı ve sonucu (bu, yapay olarak yüksek bellek kullanımını gösterecektir) göz ardı etmeyi, ardından her iki durumu da birkaç kez ve ortalamayı değiştirerek her durum için ölçümler. YALNIZCA [] ve dizi () arasındaki YALNIZCA fark sözdizimseldir, çünkü [] dizi () için bir kısaltmadır.
David Spector

6

5.3 veya önceki sürümü kullanıyorsanız [], bir dizi ve ilişkilendirilebilir dizi olarak kullanamazsınız . PHP'nin 5.4 veya sonraki sürümünü kullanıyorsanız , bir dizi, ilişkilendirilebilir dizi veya hatta çok boyutlu dizi oluşturmak için array()veya kullanabilirsiniz [].



-14

Php 7.2 kullanıldığında, benim için [ben bir diziyim] {Ben bir diziyim çalışıyor gibi görünüyor} gibi görünüyor. Fark {}ve arasındaki farktır []. Benim kodum

<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 nerede? HTML yazıyorsun.
domdambrogia

1
Ayrıca, OP'nin sorduğu durumda küme parantezleri çalışmayacaktır. Küme parantezli bir dizi oluşturamazsınız, yalnızca dizi öğelerine erişin (v5.4'ten şimdiye kadar - v7.3).
Aydin4ik
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.