2012-03-17 30 views
5

Trong php 5PHP trống var == 0?

$my_var = ""; 

    if ($my_var == 0) { 
    echo "my_var equals 0"; 

    } 

Tại sao nó đánh giá đúng? Có một số tài liệu tham khảo trong php.net về nó?

Trả lời

3

PHP is a weakly typed language. Chuỗi rỗng và boolean false sẽ đánh giá là 0 khi được kiểm tra với toán tử bằng nhau ==. Mặt khác, bạn có thể buộc nó để kiểm tra các loại bằng cách sử dụng các nhà điều hành giống hệt === như vậy:

$my_var = ""; 

if ($my_var === 0) { 
    echo "my_var equals 0"; 
} else { 
    echo "my_var does not equal 0"; 
} 

này nên cung cấp cho bạn một tấn thông tin về đề tài này: How do the PHP equality (== double equals) and identity (=== triple equals) comparison operators differ?

1

Trong dòng đầu tiên của bạn, bạn xác định $my_var làm chuỗi.

Bên trong so sánh, bạn so sánh biến đó với số nguyên không đổi.

Nếu bạn muốn so sánh chính xác (tôi không biết lý do tại sao bạn cần phải so sánh một chuỗi với một số nguyên mà không cần bất kỳ diễn viên), bạn nên sử dụng ===:

if ($my_var === 0) { 
    echo "my_var equals 0"; 
} 

Điều đó sẽ không bao giờ lặp thông điệp.

Tài liệu PHP định nghĩa trong Comparison Operators section, các nhà điều hành == như:

TRUE nếu $ a là bằng $ b sau khi loại tung hứng.

Vì vậy, điều quan trọng ở đây là type juggling.

Thực tế, trong PHP Manual: types comparisons, bảng thứ hai cho bạn biết chính xác số nguyên 0 bằng chuỗi "".

1

Điều này là do loại cưỡng chế xuất phát từ toán tử bình đẳng mà bạn đang sử dụng.

PHP manual có các bảng So sánh loại để làm sáng tỏ điều này.

Thường được coi là phương pháp hay để sử dụng toán tử giống hệt === để tránh trường hợp góc (?) Như vậy.

0

đây là tài liệu tham khảo trong cuốn hướng dẫn php về giá trị boolean

http://www.php.net/manual/en/language.types.boolean.php

và đây là tài liệu tham khảo cho các giá trị NULL

http://www.php.net/manual/en/language.types.null.php 

$my_var = ''; 

if ($my_var == 0) { 
    echo "my_var equals 0" 
} 

để đánh giá đúng vì "" cũng giống như NULL đánh giá sai hoặc 0

3

Chuỗi và số nguyên không thể so sánh trực tiếp với == . Vì vậy, PHP thực hiện loại juggling để xem nếu có một sự so sánh hợp lý có sẵn.

Khi chuỗi được so sánh với số nguyên, chuỗi đầu tiên được chuyển đổi thành số nguyên.Bạn có thể tìm thấy chi tiết về chuyển đổi here. Về cơ bản, vì "" không phải là số hợp lệ, kết quả của chuyển đổi là 0. Do đó, so sánh trở thành 0 == 0, điều này rõ ràng là đúng.

Có thể bạn sẽ muốn sử dụng so sánh danh tính === cho hầu hết (nếu không phải tất cả) so sánh của bạn.

+0

cho đến nay tôi đã tốt với == chỉ quên rằng === tồn tại ... – JohnA

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