Hari ini saya bermain dengan PHP, dan saya menemukan bahwa nilai string "true" dan "false" tidak diuraikan dengan benar ke boolean dalam suatu kondisi, misalnya mempertimbangkan fungsi berikut:
function isBoolean($value) {
if ($value) {
return true;
} else {
return false;
}
}
Jika saya menjalankan:
isBoolean("true") // Returns true
isBoolean("") // Returns false
isBoolean("false") // Returns true, instead of false
isBoolean("asd") // Returns true, instead of false
Tampaknya hanya berfungsi dengan nilai "1" dan "0":
isBoolean("1") // Returns true
isBoolean("0") // Returns false
Apakah ada fungsi asli di PHP untuk mem-parsing string "true" dan "false" ke boolean?
isBoolean("")
harus mengembalikan false.true
meskipun untuk pembaca manusia, itu akan tampak lebih intuitif yang dimaksudFALSE
.Jawaban:
Ada metode PHP asli untuk melakukan ini yang menggunakan metode filter_var PHP:
Menurut panduan PHP :
sumber
FILTER_NULL_ON_FAILURE
kefilter_var()
fungsi dan TIDAK menggantinya denganFILTER_VALIDATE_BOOLEAN
seperti yang saya pikir. Ini akan menghasilkan kode berikut yang melakukan trik untuk saya:$bool = filter_var($value, FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE)
Alasannya adalah bahwa semua string mengevaluasi
true
ketika mengubahnya menjadi boolean, kecuali"0"
dan""
(string kosong).Fungsi berikut akan melakukan persis apa yang Anda inginkan: berperilaku persis seperti PHP, tetapi juga akan mengevaluasi string
"false"
sebagaifalse
:Dokumentasi menjelaskan bahwa: http://php.net/manual/en/language.types.boolean.php :
sumber
Hanya dalam PHP
"0"
atau string kosong memaksa menjadi false; setiap string non-kosong memaksa untuk true. Dari manual :Anda perlu menulis fungsi sendiri untuk menangani string
"true"
vs"false"
. Di sini, saya menganggap semuanya standarnya salah:Di samping catatan yang dapat dengan mudah dikondensasi
sumber
Baru-baru ini saya membutuhkan fungsi konversi boolean "longgar" untuk menangani string seperti yang Anda tanyakan (antara lain). Saya menemukan beberapa pendekatan yang berbeda dan menghasilkan satu set besar data uji untuk menjalaninya . Tidak ada yang cukup sesuai dengan kebutuhan saya, jadi saya menulis sendiri:
Perhatikan bahwa untuk objek yang dihitung dan string-castable, ini akan mendukung penghitungan atas nilai string untuk menentukan kebenaran. Yaitu, jika
$object instanceof Countable
ini akan kembali(boolean) count($object)
terlepas dari nilai(string) $object
.Anda dapat melihat perilaku untuk data uji yang saya gunakan serta hasil untuk beberapa fungsi lainnya di sini . Agak sulit untuk skim hasil dari iframe kecil itu, jadi Anda dapat melihat output skrip di halaman penuh , bukan (URL itu tidak didokumentasikan sehingga ini mungkin tidak berfungsi selamanya). Kalau-kalau tautan itu mati suatu hari, saya juga menaruh kodenya di pastebin .
Garis antara apa yang "seharusnya benar" dan apa yang tidak seharusnya cukup sewenang-wenang; data yang saya gunakan dikategorikan berdasarkan kebutuhan dan preferensi estetika saya, Anda mungkin berbeda.
sumber
Saya menggunakan konstruk ini untuk mengubah string menjadi boolean, karena Anda menginginkan
true
sebagian besar nilai lainnya:sumber
Tidak - keduanya adalah string, dan keduanya (seperti yang Anda katakan) dievaluasi
true
. Hanya string kosong yang dievaluasifalse
dalam PHP.Anda perlu menguji ini secara manual. Namun, jika memungkinkan, akan lebih baik bekerja dengan nilai-nilai boolean "nyata".
sumber
true
dalam PHP.true
]" mungkin memberikan kesan yang salah kepada pemula, terutama yang berasal dari bahasa lain dengan aturan pengetikan yang lebih ketat di mana string adalah string dan isinya tidak masalah saat dikonversi ke boolean (seperti Rubi)."0"
? Bukankah ini juga dievaluasifalse
?Cara termudah untuk dengan aman mengkonversi ke boolean;
sumber
Jika API Anda hanya menerima string "benar" atau "salah", yang semuanya menjadi
null
, maka coba:Ini mengasumsikan bahwa
$input
itu bukan obyek. Null coalesce (??
) diperkenalkan dalam PHP 7.0.sumber