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 i
karena itu bukan karakter numerik float yang valid.
Akibatnya, "million" >= 1000000
mengevaluasi menjadi false, tetapi "1000000million" >= 1000000
mengevaluasi 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