Apa yang tidak dilakukan oleh operator ganda dalam PHP?
Sebagai contoh:
return !! $row;
Apa yang akan dilakukan oleh kode di atas?
Apa yang tidak dilakukan oleh operator ganda dalam PHP?
Sebagai contoh:
return !! $row;
Apa yang akan dilakukan oleh kode di atas?
Jawaban:
Ini bukan "bukan operator ganda", itu bukan operator yang diterapkan dua kali. Hak !
akan menghasilkan boolean, terlepas dari operan . Maka kiri !
akan meniadakan boolean itu.
Ini berarti bahwa untuk setiap nilai sebenarnya (angka selain nol, string dan array yang tidak kosong, dll.) Anda akan mendapatkan nilai boolean TRUE
, dan untuk nilai salah apa pun (0, 0,0, NULL
string kosong atau array kosong) Anda akan mendapatkan nilai boolean FALSE
.
Secara fungsional ini setara dengan gips untuk boolean
:
return (bool)$row;
!!
sama (bool)
dalam hal ini? Atau apakah kode mesin yang berbeda dijalankan tergantung mana yang digunakan?
!value
, dan jika ada jumlah ganjil poni itu akan sama dengan (bool) value
.
Itu sama (atau hampir sama - mungkin ada beberapa kasus sudut) seperti casting ke bool. Jika $row
ingin dilemparkan ke true, maka !! $row
itu juga benar
Tetapi jika Anda ingin mencapai (bool) $row
, Anda mungkin harus menggunakan itu - dan bukan ekspresi "menarik";)
!!
adalah kebiasaan yang tersisa dari pemrograman dalam C (++). Dalam C melakukan pemeran tidak semudah di PHP, Anda bisa mendapatkan banyak masalah yang berbeda, kompilasi peringatan, dan sebagainya. Jadi, orang-orang menggunakan boll !!
.
operator!
kelebihan muatan, menggunakannya C++
akan berbahaya. Anda juga tidak dapat menggunakan struct di C, atau menggunakannya !
. Juga jika sesuatu dapat dinegasikan, Anda kemungkinan besar dapat mengembalikannya dari fungsi pengembalian int, yang cukup banyak membuatnya menjadi boolean. Apakah Anda yakin sedang berbicara tentang C?
!!
tidak ada yang "menarik" seperti yang Anda klaim. Itu semua tempat dari C ke JavaScript.
Itu berarti jika $row
memiliki nilai kebenaran , itu akan mengembalikan true
, jika tidak false
, mengkonversi ke nilai boolean.
Berikut adalah contoh ekspresi konversi boolean dari php docs.
Expression Boolean
$x = ""; FALSE
$x = null; FALSE
var $x; FALSE
$x is undefined FALSE
$x = array(); FALSE
$x = array('a', 'b'); TRUE
$x = false; FALSE
$x = true; TRUE
$x = 1; TRUE
$x = 42; TRUE
$x = 0; FALSE
$x = -1; TRUE
$x = "1"; TRUE
$x = "0"; FALSE
$x = "-1"; TRUE
$x = "php"; TRUE
$x = "true"; TRUE
$x = "false"; TRUE
"tidak tidak" adalah cara yang mudah dalam banyak bahasa untuk memahami nilai kebenaran apa yang diberikan oleh bahasa pada hasil dari ekspresi apa pun. Misalnya, dalam Python :
>>> not not []
False
>>> not not [False]
True
Itu bisa nyaman di tempat-tempat di mana Anda ingin mengurangi nilai yang kompleks hingga sesuatu seperti "apakah ada nilai sama sekali?".
Cara lain yang lebih manusiawi, mungkin lebih sederhana, untuk 'membaca' yang tidak tidak:
Pertama '!' melakukan 2 hal: 'mengubah' nilai menjadi boolean, lalu menampilkan kebalikannya. Jadi itu akan menjadi kenyataan jika nilainya 'salah'.
Kedua '!' hanya untuk menghasilkan kebalikan dari yang pertama.
Jadi, pada dasarnya, nilai input bisa berupa apa saja, mungkin sebuah string, tetapi Anda menginginkan output boolean, jadi gunakan yang pertama '!'. Pada titik ini, jika Anda ingin TRUE ketika nilai input 'falsy', maka berhenti di sini dan cukup gunakan satu '!'; jika tidak, jika Anda ingin BENAR ketika nilai input 'benar', lalu tambahkan yang lain '!'.
Mari lihat
!$a;
Alih-alih menafsirkan! operator seperti mengambil
Kebalikan dari nilai Boolean di sebelah kanannya
Baca
ambil kebalikan dari ekspresi Boolean di sebelah kanannya
Pada kasus ini
$a;
bisa menjadi ekspresi
jadi begitu
!$a;
begitu juga
!!$a;
dan
!!!$a;
dan seterusnya, karena masing-masing adalah ekspresi yang valid, the! Operator dapat ditambahkan ke masing-masing.
return (bool) $row;