Saya ingat pernah membaca beberapa waktu yang lalu mengenai operator logika yang dalam kasus OR
, menggunakan ||
lebih baik daripada or
(atau sebaliknya).
Saya hanya harus menggunakan ini dalam proyek saya ketika kembali kepada saya, tetapi saya tidak dapat mengingat operator mana yang direkomendasikan atau apakah itu benar.
Mana yang lebih baik dan mengapa?
php
operators
logical-operators
or-operator
IniDiucapkan
sumber
sumber
$e = true || $x = 'foo'
tidak akan ditentukan$x
karena korsleting, bukan karena prioritas yang lebih tinggi.27 or 0
kembali27
untukku.or
mengembalikan boolean juga. Hanya prioritasnya yang sangat rendah sehingga terkadang terlihat seperti melakukan sesuatu yang lain. :)print 27 or 0
akan mencetak27
karenaor
terjadi setelahnyaprint 27
. BTW,echo
tidak tertipu -echo 27 or 0
akan menghasilkan1
.Mereka digunakan untuk tujuan yang berbeda dan pada kenyataannya memiliki prioritas operator yang berbeda. The
&&
dan||
operator dimaksudkan untuk kondisi Boolean, sedangkanand
danor
dimaksudkan untuk aliran kontrol.Misalnya, berikut ini adalah kondisi Boolean:
Ini berbeda dari aliran kontrol:
sumber
die()
fungsi akan dipanggil jikadoSomething()
akan kembalifalse
ataunull
? Bagaimana jikadoSomething()
kembalitrue
atau tidak sama sekali?doSomething()
dievaluasi sebagai boolean. Jika mengembalikan nilai yang dianggap benar oleh PHP (true
, string yang tidak kosong, dll.), Ia tidak akan memanggildie()
.Perbedaan masing-masing || dan OR dan && dan AND adalah prioritas operator :
$bool = FALSE || TRUE;
($bool = (FALSE || TRUE))
$bool
adalahTRUE
$bool = FALSE OR TRUE;
(($bool = FALSE) OR TRUE)
$bool
adalahFALSE
$bool = TRUE && FALSE;
($bool = (TRUE && FALSE))
$bool
adalahFALSE
$bool = TRUE AND FALSE;
(($bool = TRUE) AND FALSE)
$bool
adalahTRUE
sumber
Sumber: http://wallstreetdeveloper.com/php-logical-operators/
Berikut ini contoh kode untuk bekerja dengan operator logika:
sumber
Saya tahu itu topik lama tapi tetap saja. Saya baru saja menemui masalah dalam kode yang saya debug di tempat kerja dan mungkin seseorang mungkin memiliki masalah serupa ...
Misalkan kodenya terlihat seperti ini:
Anda akan mengharapkan (seperti yang biasa Anda gunakan dari mis. Javascript) bahwa ketika $ this-> position () mengembalikan false atau null, $ position adalah array kosong. Tapi ternyata tidak. Nilainya TRUE atau FALSE tergantung pada apa yang dikembalikan $ this-> position ().
Jika Anda perlu mendapatkan nilai $ this-> position () atau array kosong, Anda harus menggunakan:
EDIT:
Contoh di atas tidak berfungsi sebagaimana mestinya tetapi kenyataannya itu
||
danor
tidak sama ... Coba ini:Inilah hasilnya:
Jadi, sebenarnya opsi ketiga
?:
adalah solusi yang tepat ketika Anda ingin mengatur nilai yang dikembalikan atau array kosong.Diuji dengan PHP 7.2.1
sumber
$positions = $this->positions() ?? [];
mungkin yang Anda inginkan.Menurutku tidak ada yang secara inheren lebih baik dari yang lain, tapi aku sarankan untuk tetap menggunakan || karena ini adalah default di sebagian besar bahasa.
EDIT: Seperti yang ditunjukkan orang lain memang ada perbedaan antara keduanya.
sumber
Tidak ada yang buruk atau lebih baik, Itu hanya tergantung pada prioritas operator. Karena
||
memiliki prioritas yang lebih tinggi daripadaor
, sehingga||
banyak digunakan.sumber
Beberapa bahasa menggunakan sirkuit pendek, dan yang lain menggunakan evaluasi Boolean penuh (jika Anda tahu, ini mirip dengan arahan
$B
di Pascal).Penjelasan:
Dalam contoh ini, fungsi
B()
tidak akan pernah dijalankan. Karena fungsiA()
mengembalikan TRUE, hasil pernyataan OR diketahui dari bagian pertama tanpa perlu mengevaluasi bagian kedua dari ekspresi.Namun dengan
( A() || B() )
, bagian kedua selalu dievaluasi terlepas dari nilai bagian pertama.Untuk pemrograman yang dioptimalkan, Anda harus selalu menggunakan
OR
mana yang lebih cepat (kecuali untuk kasus ketika bagian pertama kembalifalse
dan bagian kedua benar-benar perlu dievaluasi).sumber
||
,B
tidak akan dipanggil. Kedua operator melakukan hal yang persis sama, hanya saja prioritasnya berbeda.