2011-08-30 42 views
5

Tôi đã có một tuyên bố if tương tự như sau trong mã của tôi và nó đã cho tôi mãi mãi để tìm ra vấn đề là gì.

$a = 0; 
if($a == 'something') 
{ 
//this was being output when I didn't want it to be 
} 

Sử dụng

$a = '0'; 

cố định nó, nhưng tôi không thực sự biết những gì đang xảy ra ở đây.

Trả lời

4

Một chuỗi là một số nguyên. PHP sẽ dịch giữa hai khi cần thiết, trừ khi bạn đang sử dụng các toán tử 'khắt khe':

(0 == '0') // true 
(0 === '0') // false (types don't match). 

Trong trường hợp của bạn, you'r so sánh một số nguyên từ 0 đến một chuỗi 'cái gì'. PHP sẽ chuyển đổi chuỗi 'cái gì đó' thành một số nguyên. Nếu không có chữ số nào ở đó, nó sẽ chuyển thành số nguyên 0, điều này giúp bạn so sánh đúng.

+0

Điều đó thật nhanh chóng, cảm ơn! – Josh

2

Chỉ cần đoán, nhưng tôi cho rằng nó đang cố gắng truyền chuỗi thành số nguyên.

intval('something') Tôi hy vọng sẽ trở lại 0.

0

Bạn đã được so sánh một giá trị số ($a = 0;) thành một chuỗi. Trong trường hợp này, chuỗi được đúc thành số, và PHP truyền chuỗi thành 0 nếu không có số ở đầu, vì vậy là đúng.

Tuy nhiên, trong trường hợp khác, bạn cắm hai chuỗi, khác nhau, vì vậy nó là false.

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