Saya telah membaca jawaban dan tidak melihat ada yang menyebutkan peringatan terbesar dalam konversi nomor PHP.
Jawaban yang paling banyak disarankan menyarankan melakukan hal berikut:
$str = "3.14"
$intstr = (int)$str // now it's a number equal to 3
Itu brilian. PHP melakukan casting langsung. Tetapi bagaimana jika kita melakukan yang berikut?
$str = "3.14is_trash"
$intstr = (int)$str
Apakah PHP menganggap konversi semacam itu valid?
Ternyata iya .
PHP membaca string sampai menemukan karakter non-numerik pertama untuk tipe yang diperlukan. Artinya untuk bilangan bulat, karakter numerik adalah [0-9]. Hasilnya, terbaca 3, karena berada dalam rentang karakter [0-9], ia terus membaca. Membaca .dan berhenti di sana karena itu tidak dalam kisaran [0-9].
Hal yang sama akan terjadi jika Anda dilemparkan ke float atau double. PHP akan membaca 3, lalu ., lalu 1, kemudian 4, dan berhenti ikarena itu bukan karakter numerik float yang valid.
Akibatnya, "million" >= 1000000mengevaluasi menjadi false, tetapi "1000000million" >= 1000000mengevaluasi ke true.
Lihat juga:
https://www.php.net/manual/en/language.operators.comparison.php bagaimana konversi dilakukan sambil membandingkan
https://www.php.net/manual/en/language.types.string.php#language.types.string.conversion bagaimana string dikonversi ke nomor masing-masing