Tôi đã đọc qua các câu trả lời và không thấy ai đề cập đến sự cảnh báo lớn nhất trong chuyển đổi số của PHP.
Câu trả lời được đánh giá cao nhất cho thấy làm như sau:
$str = "3.14"
$intstr = (int)$str // now it's a number equal to 3
Thật tuyệt vời. PHP không truyền trực tiếp. Nhưng nếu chúng ta làm như sau thì sao?
$str = "3.14is_trash"
$intstr = (int)$str
PHP có xem xét các chuyển đổi như vậy hợp lệ không?
Rõ ràng là có .
PHP đọc chuỗi cho đến khi tìm thấy ký tự không phải số đầu tiên cho loại được yêu cầu. Có nghĩa là đối với số nguyên, ký tự số là [0-9]. Kết quả là, nó đọc 3
, vì trong phạm vi ký tự [0-9], nó tiếp tục đọc. Đọc.
và dừng ở đó vì nó không nằm trong phạm vi [0-9].
Điều tương tự sẽ xảy ra nếu bạn được chọn để nổi hoặc gấp đôi. PHP sẽ đọc 3
, sau đó .
, sau đó 1
, sau đó 4
, và sẽ dừng lại i
vì nó không phải là ký tự số trôi nổi hợp lệ.
Kết quả là, "million" >= 1000000
đánh giá thành sai, nhưng "1000000million" >= 1000000
đánh giá thành true
.
Xem thêm:
https://www.php.net/manual/en/lingu.operators.comparison.php cách chuyển đổi được thực hiện trong khi so sánh
https://www.php.net/manual/en/lingu.types.opes.php#lingu.types.opes.conversion cách các chuỗi được chuyển đổi thành số tương ứng