Huruf Besar Boolean vs. Huruf kecil dalam PHP

135

Ketika saya belajar PHP, saya membaca di suatu tempat bahwa Anda harus selalu menggunakan versi boolean huruf besar, TRUEdan FALSE, karena versi huruf kecil "normal", truedan false, tidak "aman" untuk digunakan.

Sekarang sudah bertahun-tahun, dan setiap skrip PHP yang saya tulis menggunakan versi huruf besar. Sekarang, saya mempertanyakan hal itu, karena saya telah melihat banyak PHP ditulis dengan versi huruf kecil (yaitu Zend Framework).

Apakah / Apakah ada alasan untuk menggunakan versi huruf besar, atau apakah boleh-boleh saja menggunakan huruf kecil?

sunting: Lupa menyebutkan bahwa ini berlaku untuk NULLdan nulljuga.

Austin Hyde
sumber
4
Ada sejumlah situs yang mengatakan bahwa menulis huruf kecil seharusnya "lebih cepat", tetapi tanpa mengutip sumber yang serius. Tertarik untuk melihat apakah ada sesuatu yang muncul.
Pekka
2
Itu tidak benar. Saya mengujinya dengan iterasi 5M dan mereka berdua memberikan hasil yang sama, 0,5 detik pada PC saya: P
Alex
9
@Alex Pekka juga dapat berarti bahwa penulisan boolean huruf kecil sebenarnya lebih cepat. Itu masuk akal, harus menggunakan kunci lebih sedikit. Perbedaannya kecil.
Martti Laine
Maaf, saya tidak sengaja menolak setelah setelah saya memilih Anda.
SIFE
1
Pengamatan yang menarik: var_export () menulis benar dan salah sebagai huruf kecil, tetapi NULL sebagai huruf besar. Cantik ya? 3v4l.org/6Oelk
donquixote

Jawaban:

89

The PHP pengguna resmi mengatakan:

Untuk menentukan boolean literal, gunakan kata kunci TRUE atau FALSE. Keduanya case-insensitive.

Jadi ya, true === TRUEdan false === FALSE.

Secara pribadi, bagaimanapun, saya lebih memilih TRUElebih truedan FALSElebih falseuntuk alasan dibaca. Itu alasan yang sama untuk preferensi saya menggunakan ORlebih oratau ||, dan menggunakan ANDlebih andatau &&.

Standar PSR-2 mensyaratkan true, falsedan nullharus dalam huruf kecil.

Lukman
sumber
81
Hanya ingin menunjukkan itu ORdan ||merupakan operator yang berbeda dalam PHP (karena mereka memiliki prioritas yang berbeda), sebagaimana adanya ANDdan &&. (Jadi misalnya &&dan ||lebih diutamakan daripada operator penugasan, tetapi ORdan ANDtidak.)
Johrn
21
Juga dengan IDE hari ini, saya tidak melihat alasan untuk memiliki boolean huruf besar murni sebagai Sintaks Highlighter untuk sebagian besar IDE memisahkan mereka dengan perbedaan besar.
RobertPitt
37
Saya lebih suka mengetikkan huruf kecil jadi saya tidak perlu menahan tombol shift.
ack
6
Saya suka huruf kecil juga - seperti di java, tetapi masing-masing ada sendiri. Namun saya berharap mereka akan memilih satu cara dan hanya membuat kita semua berubah ke satu atau yang lain !!!!! Ini bukan fleksibilitas yang benar-benar harus saya miliki!
Ray
5
@Cyril: Ada banyak alasan bagus untuk membenci PHP (mis. Lihat saja apa yang disebutkan Johrn di atas, saya tidak tahu itu untuk satu), tetapi mengingat pada dasarnya case-insensitive, tidak ada yang aneh dalam case campuran ekspresi sama. Apa yang omong kosong, bagaimanapun, bahwa itu menggabungkan sensitivitas case dan case-insensitivity dengan ketidakpekaan umum. (Lihat misalnya: stackoverflow.com/questions/5643496/… )
Sz.
110
define('TRUE', false);
define('FALSE', true);

Selamat men-debug! (PHP < 5.1.3 (2 Mei 2006) , lihat Demo )

Sunting: Bool huruf besar adalah konstanta dan huruf kecil adalah nilai. Anda tertarik pada nilainya, bukan pada konstanta, yang dapat dengan mudah berubah.


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

Melakukan d51599dfcd3282049c7a91809bb83f665af23b69 (dan 6f76b17079a709415195a7c27607cd52d039d7c3 )

Radu
sumber
7
-1 karena A) ini tidak ada gunanya. B) ini tidak menjawab pertanyaan. dan C) Saya sudah menerima jawaban yang benar, dan ini tidak memberikan informasi bermanfaat tambahan .
Austin Hyde
36
Kemudian saya jelaskan secara rinci: bool besar adalah konstanta dan huruf kecil adalah nilai. Anda tertarik pada nilainya, bukan pada konstanta, yang dapat dengan mudah berubah. Jadi, jika Anda akan berpikir sedikit tentang teks dan tidak terburu-buru untuk memberikan penalti, Anda mungkin akan mengerti ini.
Radu
13
Saya mengerti poin yang Anda buat (sekarang), tetapi cara Anda awalnya membuatnya (IMO) samar dan tidak berguna. Seandainya Anda awalnya membuat edit Anda jawabannya, saya akan terbalik, karena ini adalah poin yang sangat bagus, sebenarnya.
Austin Hyde
4
Ini adalah jawaban yang benar. Seharusnya mendapatkan poin untuk ini.
serialworm
22
Adapun edit, deskripsi yang sedikit menyesatkan ... Nilai-nilai yang sebenarnya sendiri (yang bisa dikompilasi ke dalam token T_NULL, T_TRUEdan T_FALSEpada saat parse), adalah kasus-sensitif, sehingga menggunakan NULLsebenarnya tidak ada "konstan" --- kecuali Anda membuatnya konstan, menggunakan define(). Cukup menggunakan NULLatau TRUEtidak berarti itu adalah konstanta, seolah-olah tidak ada konstanta seperti itu, PHP mengartikannya sebagai literal. Deskripsi yang lebih akurat adalah bahwa versi huruf kecil tidak dapat didefinisikan ulang, sedangkan variasi huruf lainnya dapat .
Joe
31

Gunakan huruf kecil.

  1. Lebih mudah mengetik. (IMO)
  2. Lebih mudah dibaca. (IMO)
  3. JavaScript boolean berukuran kecil dan peka huruf besar-kecil.
Bo Allen
sumber
6
+1; Saya baru saja menambahkan argumen Javascript: karena SANGAT umum dalam pemrograman web untuk menulis kode PHP dan JS, otot-otot jari pengembangan web yang terus berkembang secara rutin menerapkan huruf yang sama yang digunakan dalam konteks bahasa terakhir. Setidaknya saya sering menemukan diri saya menulis BENAR atau SALAH dalam Javascript setelah beralih dari PHP. Menggunakan huruf kecil di PHP memperbaiki yang ini untuk selamanya.
Sz.
11

Jika Anda berniat menggunakan JSON, maka RFC7159 mengatakan:

Nama literalnya HARUS huruf kecil. Tidak ada nama literal lainnya yang diizinkan.

Dari daftar perubahan yang tidak kompatibel ke belakang di PHP 5.6 :

json_decode () sekarang menolak varian non-huruf kecil dari literal JSON benar, salah dan null setiap saat, sesuai spesifikasi JSON

Menurut standar PSR-2 :

Kata kunci PHP HARUS dalam huruf kecil.

Konstanta PHP true, false, dan null HARUS dalam huruf kecil.

Mandrake
sumber
Benar, tapi pertanyaan ini secara khusus berkaitan dengan boolean huruf besar / kecil di PHP , bukan JSON. Misalnya, keduanya json_encode(TRUE)dan json_encode(true)hasil 'true'.
Austin Hyde
3
Maaf karena menyebutkan JSON, apakah akan lebih baik jika saya menghapus semua referensi itu dan hanya menyebutkan PSR-2?
Mandrake
4
Saya pikir referensi ke JSON sesuai, karena Anda sering menggunakan javascript / JSON dengan PHP, dan mungkin mencari konsistensi.
Doug Kress
9

Saya biasa melakukan boolean C style TRUE / FALSE seperti semua const, dalam semua topi, sampai saya mendapatkan PSR kereta musik .

Bagian 2.5 dari PSR-2:

Konstanta PHP true, false, dan null HARUS dalam huruf kecil.

Jadi pada dasarnya, jika Anda ingin bermain baik dengan keterangan gaya sumber terbuka, Boolean harus huruf kecil.

Todd
sumber
5

Tidak masalah, truepersis sama dengan TRUE. Sama berlaku untuk falsedan null. Saya belum pernah mendengar bahwa itu akan menjadi masalah pada titik mana pun.

Satu-satunya cara Anda dapat mengacaukan segalanya adalah dengan mengutip nilai-nilai itu, misalnya:

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

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

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

Hanya hal yang membatasi atau mendorong Anda untuk menggunakan huruf besar atau kecil mungkin panduan perusahaan atau kode Anda sendiri. Selain itu, Anda bebas untuk menggunakan salah satunya dan itu tidak akan menyebabkan masalah apa pun.

Tatu Ulmanen
sumber
FALSE dan NULL tidak sama. is_null () tidak mengembalikan true jika nilai === FALSE.
Noah Goodrich
9
@Noah Goodrich, saya tidak menyiratkan hal itu falsedan nullakan sama. Saya mengatakan bahwa "sama berlaku untuk falsedan null", yang berarti bahwa keduanya dapat diekspresikan dalam huruf kecil atau besar.
Tatu Ulmanen
5

Saya telah menulis kode sederhana untuk memeriksa perbedaan antara false dan FALSE : Setiap iterasi melakukan sesuatu yang:

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

Inilah hasilnya:

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

Jadi kita dapat melihat bahwa kinerja sangat sedikit tersentuh oleh case boolean - huruf kecil lebih cepat. Tapi tentu saja Anda tidak akan melihat.

Arkadij Kuzhel
sumber
Apa mesin JS? Saat ini JS dikompilasi dalam memori sebelum dieksekusi.
Tiberiu-Ionuț Stan
1
PHP tokenized sebelum eksekusi, dan seharusnya tidak ada perbedaan waktu. Jawaban lain menunjukkan bahwa bagian atas lebih cepat. Perbedaan sebesar ini dalam tes apa pun harus diabaikan - perbedaan ini adalah 2,5e-7 per iterasi.
Doug Kress
4

Secara pribadi saya selalu menggunakan bentuk huruf kecil, tetapi tanpa alasan tertentu selain untuk membuat kode saya terlihat rapi, satu-satunya tempat saya menggunakan huruf kapital adalah ketika nama kelas casing unta dan nama variabel.

Satu keuntungan menggunakan huruf besar yang muncul dalam pikiran adalah bahwa mereka menonjol dan mudah ditemukan dalam kode.

RMcLeod
sumber
2
+1 untuk kerapian. Semua tradisi topi berasal dari C, tapi sudah saatnya kita menyingkirkan bentuk jelek itu.
Petruza
2

Saya menemukan pertanyaan lama ini sambil bertanya pada diri sendiri hal yang sama. Poin bagus dengan define ('TRUE', false); define ('FALSE', true); Tidak berlaku untuk php5. Menulis baris-baris itu dalam kode php5 seperti menulis komentar.

Conrad
sumber
6
Hanya untuk referensi di masa mendatang, Anda memposting ini sebagai "jawaban". Di StackOverflow, tidak seperti forum tradisional, pos percakapan yang tidak benar-benar berfungsi sebagai solusi untuk pertanyaan dan tidak memberikan informasi yang bermanfaat harus diposting sebagai komentar untuk pertanyaan awal atau jawaban yang relevan. Dalam hal ini, pos Anda akan lebih cocok untuk mengomentari pertanyaan saya daripada jawaban.
Austin Hyde
8
sebenarnya sangat membantu untuk mengetahui ini tidak berfungsi lagi di PHP 5: P
Alex
1

Inilah TEST saya di Windows 7x64bit Apache / 2.4.9 PHP / 5.5.14

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

Kali ini SALAH menang 20 kali. Jadi huruf besar lebih cepat di lingkungan saya.

Abbas Uddin
sumber