PHP içinde dizi [anahtar] kullanmak için tamam mı?

6 Cevap php

O $ dizi [anahtar] gibi tek veya çift quotion olmadan dizi kullanmak için tamam mı? Ben tek veya çift tırnak kullanmak istemiyorsanız PHP sabiti ilk bakmak çünkü kötü olduğunu düşündüm. Arkadaşlarımdan biri farketmez söyledi.

Siz ne düşünüyorsunuz?

6 Cevap

It is not considered as OK - bu çoğu durumda çalışacaktır bile.


Basically, when PHP sees this :

echo $array[key];

Bu key -- and, if there is none, if will take the 'key' değeri denilen, define ile tanımlı, sürekli arayacaktır.


But, if there is something like this earlier in your code :

define('key', 'glop');

Bu almayacağız

echo $array['key'];

artık; bunun yerine, the value of the key sabiti kullanacaksınız - ve kod olarak aynı olacaktır:

echo $array['glop'];


In the end, not putting quotes arround the key's name is bad for at least two reasons :

  • There is a risk that it will not do what you expect -- which is very bad
    • Bu olabilir, bugün ...
    • Ama önümüzdeki hafta / ay / yıl yaklaşık?
    • Belki, bir gün, olacak define wrong adıyla ;-) ile sürekli
  • It's not good for performance :
    • o kullanmadan önce, bir sabiti aramak için vardır 'key'
    • Yorumunuzda söylediği gibi, bu bildirimleri (even if you disable error_reporting and display_errors , the notices/warnings/errors are still generated, even if discarded later) üretir

Yani: Eğer bu noktada o adam dinlemek gerekir: o yanlış: it does matter.


And if you need some "proof" that's "better" than what people can tell you on stackoverflow, you can point him to this section of the manual, as a reference : Why is $foo[bar] wrong?

Bu not Okay ve diğerleri dedi ne eklemek için, çoğu durumda bir hata tetikler:

8 Notice Use of undefined constant key - assumed 'key' in file: 'index.php' on line 46

Için PHP Manual içinde bölümüne bakın "Neden $ foo [bar] yanlıştır?" http://php.net/manual/en/language.types.array.php: "Dizi ve yapılmayacak şeyler" Bu sayfadaki altında

PHP Manual - Why is $foo[bar] wrong? Gönderen

Her zaman bir dize sayıllı indis tırnak kullanabilirsiniz. $ Foo [bar] değildir Örneğin, foo ['bar'] $, doğrudur. Ama neden? Eski komut sözdizimi bu tür karşılaşmaya ortak:

<?php
$foo[bar] = 'enemy';
echo $foo[bar];
// etc
?>

Bu yanlıştır, ama çalışıyor. Nedeni, bu kod tanımlanmamış bir sabit (bar) yerine bir dize (- tırnak fark 'bar') sahip olmasıdır. PHP gelecekte ne yazık ki böyle bir kod için, aynı ada sahip, sabit tanımlayabilir. PHP otomatik çıplak dize içeren bir dize içine bir çıplak dize (bilinen herhangi bir sembole karşılık gelmez bir tırnaksız dize) dönüştürür çünkü çalışır. Tanımlanmış bir sabit adında bir bar var Örneğin, daha sonra PHP 'bar' dizgesini yerleştirecek ve bunu kullanacaktır.

Eğer kontrol etmek için kılavuzda biraz daha örnekler var.

Anahtar aslında bir sabit olmadıkça, sen tuşu tırnak koyarak olmamak için hiçbir neden yoktur.

PHP çalışır yolu bunu koyduk ne sabit bir değer arar, fakat sabit bulunamazsa eğer bunun dize temsilini alır.

Birisi yolda kodunuzu düzenlemek ve bu anahtar adı ile bir sabit eklemek için olsaydı, bu sadece daha fazla baş ağrısı neden olur.

Bu bad practice nedenlerle bir dizi için, anahtar değerleri alıntı değil ediyor:

  1. Böyle define 'd sabitleri olarak anlamlı sembol isimler, potansiyel çarpışmalar.
  2. Bazı tuşlar alıntı olmadan ifade edilemez (örneğin, anahtar "]").
  3. Kötü alışkanlıkları (yani 1. ve getirmedi # 2) sonra sizi ısırabilir.
  4. Performans - define 's zaman alır arıyor.

Eğer bir sürü etrafında geçiyoruz bir şey sadece standart unsurları adları etrafında tırnak yazarak önlemek isteyen iseniz, belki de yerine bir object->property sözdizimi almak yerine, hangi nesneleri kullanmak isteyebilirsiniz $array["element"] sözdizimi.

Bu yanlış ve sabit oto-tanımlayacağız:

$var = $array[bar];

Bu kullanım Ancak doğrudur:

$var = "string $array[bar] ...";

PHP2 ile uyumluluk için bu eski sözdizimi hala dize bağlamında izin verilir. Ayrıca etrafında {} kaşlı ayraçlar kullandığınız sürece anahtarı alıntı, bir ayrıştırma hatası yol açacak.