PHP'de Büyük Booleanlar ve Küçük Harfler


135

Ben PHP öğrenme oldu, ben her zaman boole büyük harf versiyonlarını kullanması gerektiğini okumuştum, TRUEve FALSE"normal" küçük versiyonları, çünkü trueve false, kullanımına "güvenli" değildi.

Şimdi uzun yıllar oldu ve yazdığım her PHP betiği büyük harf sürümünü kullanıyor. Şimdi, yine de, küçük harfli sürümle (yani Zend Framework) yazılmış çok sayıda PHP gördüğüm için bunu sorguluyorum.

Büyük harfli versiyonu kullanmak için hiç bir sebep var mıydı, yoksa küçük harf kullanmak tamamen uygun mudur?

düzenleme: Bunun NULLve nulliçin de geçerli olduğunu söylemeyi unuttum .


4
Küçük harfle yazmanın sözde "çok daha hızlı" olduğunu söyleyen, ancak herhangi bir ciddi kaynağa atıfta bulunmayan birkaç site var. Bir şey çıkıp çıkmayacağını merak ediyorum.
Pekka

2
Bu doğru değil. 5M yinelemelerle test ettim ve ikisi de aynı sonuçları verdi, bilgisayarımda 0.5 sn: P
Alex

9
@Alex Pekka , küçük harfli boolelerin gerçek yazımının daha hızlı olduğu anlamına da gelebilir . Daha az anahtar kullanmak zorunda olmak mantıklı. Fark çok küçük olsa da.
Martti Laine

Özür dilerim, size oy verdikten sonra yanlışlıkla oy verdim.
SIFE

1
İlginç bir gözlem: var_export (), true ve false'u küçük harf olarak, ancak NULL'u büyük harf olarak yazar. Güzel değil mi? 3v4l.org/6Oelk
donquixote

Yanıtlar:


89

Resmi PHP kılavuzu diyor ki:

Bir boole değişmezi belirtmek için, TRUE veya FALSE anahtar kelimelerini kullanın. Her ikisi de büyük / küçük harfe duyarlı değildir.

Yani evet true === TRUEve false === FALSE.

Şahsen, ancak, tercih TRUEüzerinde trueve FALSEüzerinde falseokunabilirliği nedenlerle. Bu kullanma konusunda benim tercihi için aynı neden ORüzerinde orveya ||, ve kullanımı ile ilgili ANDaşırı andveya &&.

PSR-2 standardı gerektiren true, falseve nulldaha düşük durumda olması.


81
Sadece bu işaret etmek istiyorum ORve ||gibidir, (bunlar farklı önceliğe sahiptir olduğu gibi) PHP farklı operatörler vardır ANDve &&. (Yani, örneğin &&ve ||atama operatörleri daha yüksek önceliğe ancak ORve ANDdeğillerdir.)
Johrn

21
Ayrıca bugünün IDE'lerinde, çoğu IDE için Sözdizimi Vurgulayıcı olarak saf büyük harfli boole'ye sahip olmanın nedenini görmüyorum.
RobertPitt

37
Küçük harflerle yazmayı çok tercih ederim, böylece shift tuşunu basılı tutmam gerekmez.
ack

6
Küçük harfleri de severim - java'daki gibi, ama her biri için kendi. Keşke TEK bir yola yerleşseler ve hepimizi sadece birine veya diğerine değiştirseler !!!!! Bu gerçekten sahip olmam gereken bir esneklik değil!
Ray

5
@Cyril: PHP'den nefret etmek için pek çok iyi neden var (örneğin, Johrn'un yukarıda bahsettiğine bakın, bunu biri için bilmiyordum), ancak temelde büyük / küçük harfe duyarlı olmadığı göz önüne alındığında, karışık durumda garip bir şey yok ifadeler aynıdır. Ne olduğunu genel duyarsızlık ile harf duyarlılığı ve vaka-duyarsız karışır Ancak, saçma. (Bkz. Örneğin: stackoverflow.com/questions/5643496/… )
Sz.

110
define('TRUE', false);
define('FALSE', true);

Mutlu hata ayıklama! (PHP < 5.1.3 (2 Mayıs 2006) , Demo'ya bakınız )

Düzenleme: Büyük harf boolleri sabitler ve küçük harfler değerlerdir. Değere ilgi duyuyorsunuz, kolayca değişebilen sabitle değil.


Eliminated run-time constant fetching for TRUE, FALSE and NULL

author      dmitry <dmitry>
            Wed, 15 Mar 2006 09:04:48 +0000 (09:04 +0000)
committer   dmitry <dmitry>
            Wed, 15 Mar 2006 09:04:48 +0000 (09:04 +0000)
commit      d51599dfcd3282049c7a91809bb83f665af23b69
tree        05b23b2f97cf59422ff71cc6a093e174dbdecbd3
parent      a623645b6fd66c14f401bb2c9e4a302d767800fd

Kaydedilmesini d51599dfcd3282049c7a91809bb83f665af23b69 (ve 6f76b17079a709415195a7c27607cd52d039d7c3 )


7
-1 çünkü A) bu anlamsız. B) bu soruya cevap vermiyor. ve C) Doğru cevabı zaten kabul ettim ve bu herhangi bir ek yararlı bilgi sunmuyor .
Austin Hyde

36
O halde ayrıntılı olarak açıklamama izin verin: büyük harfli booller sabittir ve küçük harfler değerlerdir. Değere ilgi duyuyorsunuz, kolayca değişebilen sabitle değil. Öyleyse, metin üzerinde biraz düşünseydiniz ve ceza vermek için acele etmezseniz, muhtemelen bunu anlardınız.
Radu

13
Söylediğiniz noktayı anlıyorum (şimdi), ancak başlangıçta yaptığınız yol (IMO) şifreli ve anlamsızdı. Başlangıçta cevabı düzenlemenizi yeni yapmış olsaydınız, bu çok iyi bir nokta olduğundan, olumlu oy verirdim.
Austin Hyde

4
Bu doğru cevap. Bunun için puan almalıydı.
serialworm

22
Düzenlemek için olduğu gibi, bu açıklama biraz yanıltıcı ... gerçek değerler kendilerini (jeton içine derlenmiş olsun olduğunu T_NULL, T_TRUEve T_FALSEbu yüzden kullanarak, ayrıştırma saati) vardır harf duyarsız NULL--- aslında bir "sabit" değil sürece sen yapmak o sabit kullanarak define(). Basitçe kullanmak NULLveya TRUEsabit olduğu anlamına gelmez, sanki böyle bir sabit yokmuş gibi, PHP onu değişmez olarak yorumlar. Daha doğru bir açıklama küçük versiyonları olduğunu olamaz başka bir olguya varyasyonu ise yeniden tanımlanabilir kutu .
Joe

31

Küçük harf kullanın.

  1. Yazması daha kolay. (IMO)
  2. Okuması daha kolay. (IMO)
  3. JavaScript booleleri küçük harf ve büyük / küçük harfe duyarlıdır.

6
+ 1; Ben de Javascript argümanını eklemek üzereydim: Web programlamada hem PHP hem de JS kodunu yazmak ÇOK yaygın olduğundan, iyi gelişmiş web geliştirme parmak kasları, son dil bağlamında kullanılan aynı harf durumunu rutin olarak uygulamaya devam ediyor. En azından PHP'den geçtikten sonra kendimi Javascript'te DOĞRU veya YANLIŞ yazarken buldum. PHP'de küçük harf kullanmak bunu tamamen düzeltti.
Sz.

11

JSON kullanmayı düşünüyorsanız, RFC7159 şunu söyler:

Değişmez isimler küçük harf olmalıdır ZORUNLU. Diğer gerçek isimlere izin verilmez.

PHP 5.6'daki geriye dönük uyumsuz değişiklikler listesinden :

json_decode (), JSON belirtimine göre artık doğru, yanlış ve null JSON değişmez değerlerinin küçük harf olmayan varyantlarını her zaman reddediyor

Göre PSR-2 standardı :

PHP anahtar sözcükleri küçük harfle yazılmalıdır.

Doğru, yanlış ve null PHP sabitleri küçük harfle yazılmalıdır.


Doğru, ancak bu soru özellikle JSON'da değil PHP'deki büyük / küçük harfli boolelerle ilgiliydi . Örneğin, hem json_encode(TRUE)ve hem de json_encode(true)verim 'true'.
Austin Hyde

3
JSON'dan bahsettiğim için üzgünüm, tüm bu referansları kaldırsam ve yalnızca PSR-2'den bahsetsem daha iyi olur mu?
Mandrake

4
PHP ile sıklıkla javascript / JSON kullandığınız ve tutarlılık arayışında olabileceğiniz için JSON referansının uygun olduğunu düşünüyorum.
Doug Kress

9

PSR ana vagonuna girene kadar tüm sabitler gibi C stili DOĞRU / YANLIŞ boole'ları tüm büyük harflerle yapıyordum .

PSR-2 Bölüm 2.5:

Doğru, yanlış ve null PHP sabitleri küçük harfle yazılmalıdır.

Temel olarak, açık kaynak tarzı ayrıntılarla iyi oynamak istiyorsanız, Booleanlar küçük harf olmalıdır.


5

Fark etmez true, tamamen aynıdır TRUE. Aynı şey falseve için de geçerli null. Bunun herhangi bir noktada önemli olacağını duymadım.

İşleri alt üst etmenin tek yolu bu değerleri alıntılamaktır, örneğin:

$foo = false;   // FALSE
$bar = "false"; // TRUE

$foo2 = true;   // TRUE
$bar2 = "true"; // TRUE

$foo3 = null;   // NULL
$bar3 = "null"; // TRUE

Sizi büyük veya küçük harf kullanmanızı kısıtlayan veya teşvik eden tek şey şirketinizin veya kendi kodlama yönergeleriniz olabilir. Bunun dışında, ikisinden birini kullanmakta özgürsünüz ve herhangi bir soruna yol açmayacaktır.


FALSE ve NULL aynı değildir. is_null () değeri === YANLIŞ ise doğru döndürmez.
Noah Goodrich

9
@Noah Goodrich, ben herhangi bir noktada olduğunu ima etmedi falseve nullaynı olacaktır. "Aynısı falseve için de geçerli" dedim, nullbu her ikisinin de küçük veya büyük harflerle ifade edilebileceği anlamına geliyor.
Tatu Ulmanen

5

Yanlış ve YANLIŞ arasındaki farkları kontrol etmek için basit bir kod yazdım : Her yineleme şu şeyleri yapıyordu:

    for ($i = 0; $i < self::ITERATIONS; ++$i) {
       (0 == FALSE) ;
    }

Sonuçlar burada:

Iterations: 100000000
using 'FALSE': 25.427761077881 sec
using 'false': 25.01614689827 sec

Böylece, boolean büyüklüğünün performansa çok az değindiğini görebiliriz - küçük harf daha hızlıdır. Ama kesinlikle görmeyeceksin.


Hangi JS motoru? Günümüzde JS, çalıştırılmadan önce bellekte derlenmektedir.
Tiberiu-Ionuț Stan

1
PHP, çalıştırılmadan önce belirteçlenir ve zaman açısından bir fark olmamalıdır. Başka bir cevap, üst kısmın daha hızlı olduğunu gösterdi. Herhangi bir testte bu büyüklükteki farklılıklar göz ardı edilmelidir - bu fark yineleme başına 2.5e-7'dir.
Doug Kress

4

Şahsen ben her zaman küçük harf biçimini kullandım, ancak kodumun düzenli görünmesini sağlamaktan başka belirli bir neden olmadan, büyük harfleri kullandığım tek yer deve kılıfı sınıf adları ve değişken adlarıdır.

Akla gelen büyük harf kullanmanın bir avantajı, çıkıntılı olmaları ve kodda kolayca bulunabilmeleridir.


2
Düzenlilik için +1. Tümü büyük harf geleneği C'den gelir, ancak bu çirkin formdan kurtulmamızın zamanı geldi.
Petruza

2

Bu eski soruyla kendime aynı şeyi sorarken karşılaştım. Define ('TRUE', false); define ('FALSE', true); Yine de php5 için geçerli değil. Bu satırları php5 kodunda yazmak, yorum yazmak gibidir.


6
Gelecekte referans olması için, bunu bir "cevap" olarak gönderdin. StackOverflow'da, geleneksel forumların aksine, aslında soruya bir çözüm sunmayan ve yararlı bilgiler sağlamayan sohbet gönderileri, orijinal soruya veya ilgili yanıta yorum olarak gönderilmelidir. Bu durumda, gönderiniz bir cevaptan ziyade sorumla ilgili bir yorum yapmak için daha uygun olacaktır.
Austin Hyde

8
aslında bunun PHP 5'te artık çalışmadığını bilmek yararlıdır: P
Alex

1

İşte Windows 7x64bit Apache / 2.4.9 PHP / 5.5.14'teki TESTim

$blockLimit = 50;
while($blockLimit > 0): $blockLimit--;

//STAR Here ================================================

$msc = microtime(true);
for ($i = 0; $i < 100000; $i++) {
   echo (FALSE);
}
echo 'FALSE took ' . number_format(microtime(true)-$msc,4) . " Seconds\r\n";
$msc = microtime(true);
for ($i = 0; $i < 100000; $i++) {
   echo (false);
}
echo 'false took ' . number_format(microtime(true)-$msc,4) . " Seconds\r\n";

echo "\r\n --- \r\n";
//Shutdown ==================================================
endwhile;

FALSE bu sefer 20 kez kazandı. Yani büyük harf benim çevremde daha hızlı.

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.