2012-07-15 41 views
5

Tôi đã thực hiện một vài thử nghiệm với chuỗi sử dụng '=='. Tôi biết để so sánh chuỗi '==' không phải là cách, nhưng có một hành vi kỳ lạ tôi muốn giải quyết.So sánh chuỗi PHP bằng cách sử dụng '=='

Tôi đang theo dõi tài liệu PHP trong trang này: http://www.php.net/manual/en/language.operators.comparison.php. Đây là thử nghiệm tôi đã làm

<?php 
    var_dump("100" == "1e2"); //outputs boolean true 
    var_dump((int) "100"); //int 100 
    var_dump((int) "1e2"); //int 1 
?> 

Các tài liệu nói khi chúng ta so sánh chuỗi với những con số, PHP đầu tiên chuyển đổi chuỗi số, nhưng khi tôi chuyển đổi '100' và '1e2' đến các số họ không bằng nhau. So sánh sẽ xuất ra boolean false.

Tại sao hành vi kỳ lạ này? Cảm ơn!

+0

Ngẫu nhiên đây là lý do tại sao tốt nhất nên sử dụng '===' thay vì '==', vì kết quả có thể dự đoán được nhiều hơn! –

Trả lời

6

Không phải tất cả các số đều là số nguyên. 1e2 là một phao (có thể được biểu diễn dưới dạng số nguyên, nhưng không phải là trực tiếp có thể chuyển đổi thành số nguyên). Thử chuyển đổi để float s chứ không phải int s:

<?php 
    var_dump("100" == "1e2"); // bool(true) 
    var_dump((float) "100"); // float(100) 
    var_dump((float) "1e2"); // float(100) 
?> 
+1

Để mở rộng về điều này, đây là giải thích trong tài liệu. http://www.php.net/manual/en/language.types.string.php#language.types.string.conversion "Nếu chuỗi không chứa bất kỳ ký tự '.', 'e' hoặc ' E 'và giá trị số phù hợp với giới hạn kiểu số nguyên (như được định nghĩa bởi PHP_INT_MAX), chuỗi sẽ được đánh giá dưới dạng số nguyên. Trong tất cả các trường hợp khác, nó sẽ được đánh giá là một phao. " –

1

Type Juggling không bằng Type Casting

Từ Type Juggling trang

Nếu một trong hai toán hạng là một phao, sau đó cả hai toán hạng được đánh giá như phao nổi, và kết quả sẽ là một phao. Nếu không, toán hạng sẽ được hiểu là số nguyên và kết quả cũng sẽ là số nguyên.

Các vấn đề liên quan