2011-12-22 35 views
6

Tôi đã gặp vấn đề với cách xử lý php "0" khác nhau.PHP được xử lý "0" là trống?

tôi chạy sau kịch bản trên 2 máy khác nhau:

$a = "0"; 
if ($a) { 
    echo("helo"); 
} 

1) Local Machine -> PHP 5.2.17 -> nó điều trị "0" là hợp lệ và in 'helo'

2) Máy chủ -> PHP 5.3.6 -> nó được xử lý "0" là trống/sai và không in 'helo'

Đây có phải là do cấu hình php (nếu có, cấu hình nào) hoặc php phiên bản?

+4

PHP 5.2.17 (Win32) không * không * in "helo" khi '$ a =" 0 ";' (chỉ thử nghiệm trên CLI và thông qua Apache để đảm bảo). Bạn cũng phải có một ký tự khác trong chuỗi ký tự - có thể là một ký tự khoảng trống ẩn khi được in, như '\ r'? – DaveRandom

Trả lời

5

Đó là cách nó được cho là. PHP diễn giải chuỗi trong ngữ cảnh boolean. "0" tương đương với 0 thực tế. (Xem thêm http://www.php.net/manual/en/types.comparisons.php)

gì bạn có nghĩa là để kiểm tra có lẽ là:

if (strlen($a)) { 
+0

Nhưng nó không làm điều đó trong PHP 5.2.17? – Jaanus

2

if($a) nên FALSE, theo documentation. Nó cũng sẽ như thế trên máy địa phương của bạn. Bạn có chắc chắn rằng trên máy địa phương, bạn không có một không gian sau 0 hoặc một cái gì đó? ("0<space>" sẽ là TRUE.)

0

Sound lạ với tôi, tôi đã nghĩ "0" là sai sự thật, bạn có thể xem here

0

PHP có thể interporate "0" là sai vì nó sẽ được equivilent để null/false/0.

Tuy nhiên, nó cũng có thể kết hợp nó dưới dạng chuỗi "0". Vì vậy, câu lệnh if sẽ trả về true, tuy nhiên, tôi nghĩ rằng đó sẽ là một lỗi trừ khi bạn gõ cast nó vào (string).

Giống như Mario đã nói, kiểm tra strlen ($ a) hoặc kiểm tra xem (! Empty ($ a)) theo cách đó bạn sẽ nhận được câu trả lời dứt khoát của bạn.

Tôi hy vọng điều này sẽ hữu ích!

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