2011-12-05 25 views
37

Ai đó có thể giải thích cho tôi tại sao điều này:Type-casting để boolean

var_dump((bool) 1==2); 

lợi nhuận

bool(true) 

nhưng

var_dump(1==2); 

lợi nhuận

bool(false) 

Tất nhiên sự trở lại thứ hai là chính xác, nhưng tại sao trong lần đầu tiên php trả về một giá trị bất ngờ?

+9

Đặt hàng các hoạt động đang đưa bạn đến đây ... – Brad

Trả lời

74

Nó thực sự không có vẻ lạ. (bool) has higher precedence than ==, vì vậy đây:

var_dump((bool) 1==2); 

tương đương với điều này:

var_dump( ((bool) 1) == 2); 

hay này:

var_dump(true == 2); 

Do type juggling, các 2 cũng cơ bản được đúc để bool (vì đây là "so sánh lỏng lẻo"), do đó, nó tương đương với điều này:

var_dump(true == true); 

hay này:

var_dump(true); 
+0

Cảm ơn lời giải thích rất chi tiết :) –

+0

Bạn được chào đón! – ruakh

+2

... nhưng một lý do khác để cố gắng luôn sử dụng '===' – xDaizu

19

Vì trong ví dụ đầu tiên, diễn viên diễn ra trước khi so sánh. Vì vậy, nó như thể bạn đã viết

((bool) 1)==2 

tương đương với

true == 2 

mà được đánh giá bằng cách chuyển đổi 2 để true và so sánh, cuối cùng sản xuất true.

Để xem các kết quả mong đợi bạn cần phải thêm dấu ngoặc để làm cho trật tự rõ ràng:

var_dump((bool)(1==2)); 

See it in action.

+1

+1 cảm ơn vì phản hồi nhanh –

6

tôi sử dụng theo cách này:

!!0 (false) 
!!1 (true) 
+4

Khi dòng tiêu đề yêu cầu gõ câu trả lời này là chính xác và có thể được sử dụng ở hầu hết mọi ngôn ngữ. Cấu trúc này là rất tốt cho các ngôn ngữ như JavaScript, nơi bạn cần một "true" hoặc "false" thực sự, nhưng không giữ nguyên giá trị ban đầu. BTW, typecasting với (bool) là một chút nhanh hơn. –

0

Cách bạn đã viết báo cáo kết quả ((bool) 1 == 2) sẽ luôn luôn trả đúng bởi vì nó sẽ luôn thực thi mã như dòng dưới đây:

Đầu tiên, mã sẽ thực hiện

(bool)1 

và (bool) 1 sẽ trả về giá trị đúng.

Bây giờ kể từ (bool) 1 là đúng ở bước thứ hai tuyên bố của bạn sẽ như thế nào

true ==2 

Kể từ khi chúng tôi sẽ định kiểu 2 vào boolean nó sẽ trở lại đúng, ở trạng thái cuối cùng tuyên bố của bạn sẽ như thế nào

true == true 

Điều này rõ ràng sẽ trả về giá trị đúng. Điều tương tự tôi đã giải thích năm trước trong bài đăng của tôi là PHP Type casting.

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