tôi có mã này:hành vi Rất lạ trong PHP
$test = 0;
if ($test == "on"){
echo "TRUE";
}
Kết quả của đoạn mã này sẽ là:
TRUE
TẠI SAO ??? Phiên bản PHP của tôi: 5.4.10.
tôi có mã này:hành vi Rất lạ trong PHP
$test = 0;
if ($test == "on"){
echo "TRUE";
}
Kết quả của đoạn mã này sẽ là:
TRUE
TẠI SAO ??? Phiên bản PHP của tôi: 5.4.10.
Nếu bạn so sánh số với chuỗi hoặc so sánh liên quan đến chuỗi số, thì mỗi chuỗi được chuyển thành một số và so sánh được thực hiện bằng số. Các quy tắc này cũng áp dụng cho báo cáo chuyển đổi. Việc chuyển đổi loại không diễn ra khi so sánh là === hoặc! == vì điều này liên quan đến việc so sánh loại cũng như giá trị.
$test = 0;
if ($test === "on"){
echo "TRUE";
}
PHP sẽ chuyển đổi chuỗi thành số để so sánh. Sử dụng ===
, sẽ so sánh giá trị cũng như loại dữ liệu.
var_dump(0 == "a"); // 0 == 0 -> true
var_dump("1" == "01"); // 1 == 1 -> true
var_dump("10" == "1e1"); // 10 == 10 -> true
var_dump(100 == "1e2"); // 100 == 100 -> true
Có. === hoạt động tốt. Nhưng 0! = "Bật", tôi nghĩ vậy :) – Weltkind
Đó là vì chuyển đổi. Kiểm tra các bản cập nhật. –
Điều này là do bạn đang làm ==
0
là số nguyên như vậy trong on
này chuyển đổi sang int là 0
Vì vậy, bạn câu lệnh if trông giống như 0==0
Đối với giải pháp Bạn có để sử dụng ===
if ($test === "on")
Vì bạn đang so sánh $test
với giá trị chuỗi không phải là giá trị nhị phân, nếu bạn muốn so sánh với giá trị chuỗi, hãy thử với so sánh ===
, cho value + dataType
.
Trong ví dụ của bạn, var_dump(0=="on");
luôn trả lại bool(true)
.
Nhưng khi bạn sử dụng var_dump(0==="on");
, nó sẽ cung cấp cho bạn bool(false)
.
var_dump(0 == "a"); // 0 == 0 -> true
var_dump("1" == "01"); // 1 == 1 -> true
var_dump("10" == "1e1"); // 10 == 10 -> true
var_dump(100 == "1e2"); // 100 == 100 -> true
Nếu bạn so sánh một số với một chuỗi hoặc so sánh liên quan đến chuỗi số, sau đó mỗi chuỗi được chuyển đổi thành số và so sánh biểu diễn số. Các quy tắc này cũng áp dụng cho báo cáo chuyển đổi. Việc chuyển đổi loại không diễn ra khi so sánh là === hoặc! == vì điều này liên quan đến việc so sánh loại cũng như giá trị.
Vì vậy, hãy sử dụng "===" để so sánh.
Tham khảo link: http://php.net/manual/en/language.operators.comparison.php
Trong PHP, so sánh lỏng lẻo giữa số nguyên và chuỗi không phải số (tức là chuỗi mà không thể được hiểu là số, chẳng hạn như "php" hoặc trong trường hợp của bạn "trên") sẽ gây ra chuỗi được hiểu là số nguyên với giá trị bằng 0. Lưu ý rằng số "43", "1e3" hoặc "123" là chuỗi số và sẽ được hiểu chính xác dưới dạng giá trị số.
Tôi biết điều này thật kỳ lạ.
http://stackoverflow.com/questions/672040/comparing-string-to-integer-gives-strange-results – markdwhite
vì '(int)" trên "' bằng '0' – Armen
@Armen thực sự,' int 'của * BẤT K * * chuỗi là 0, đó là lý do tại sao nó sẽ luôn luôn đúng nếu so với 0. (thử' intval ("anystringyouwanthere") ') – morcen