Tôi đang làm việc trên một số mã phân tích cú pháp dữ liệu trong khi tôi đi qua những điều sau đây.So sánh và so sánh số nguyên chuỗi PHP Weird
$line = "100 something is amazingly cool";
$key = 100;
var_dump($line == $key);
Vâng hầu hết chúng ta mong chờ bãi để sản xuất một false
, nhưng trước sự ngạc nhiên của tôi bãi là một true
!
Tôi hiểu rằng trong PHP có loại chuyển đổi như thế:
$x = 5 + "10 is a cool number"; // as documented on PHP manual
var_dump($x); // int(15) as documented.
Nhưng tại sao một sự so sánh như thế nào tôi đã đề cập trong ví dụ đầu tiên chuyển xâu của tôi để nguyên thay vì chuyển đổi số nguyên để chuỗi.
tôi hiểu rằng bạn có thể làm một ===
nghiêm ngặt-so với ví dụ của tôi, nhưng tôi chỉ muốn biết:
- Có bất kỳ phần nào của tài liệu PHP nhắc về hành vi này?
- Có ai có thể giải thích lý do tại sao xảy ra trong PHP không?
- Làm cách nào để người lập trình có thể ngăn chặn sự cố như vậy?
== so sánh số tôi nghĩ, và khi bạn lấy và chuỗi và chuyển đổi nó thành một số nếu nó bắt đầu bằng một số, nó sử dụng số đó. Nếu nó không có thể trả lại một cái gì đó như NaN. – rubixibuc
Hầu hết chúng ta mong chờ điều này ....khi đúc một chuỗi thành một số nguyên (như khi so sánh một chuỗi với một số), PHP dừng lại ở chữ số đầu tiên không phải chữ số mà nó gặp phải, trong trường hợp này là khoảng cách giữa 100 (tất cả chữ số) và "cái gì đó". SO 100 là giá trị kết quả. –
Xem http://stackoverflow.com/a/8672423 – Gumbo