PHP được thiết kế (hoặc, đúng hơn là phát triển) để sử dụng cho các yêu cầu web, trong đó bạn thường xuyên xử lý đầu vào chuỗi (tham số URL hoặc yêu cầu POST từ một biểu mẫu trong trình duyệt). Như vậy, nó sẽ tự động truyền chuỗi sang các loại khác.
Một ví dụ đơn giản về điều này là '1' + '2'
đưa ra 3
, không phải là lỗi, hoặc '12
', hoặc một số giải thích khác. Theo cùng một logic, chuỗi '0'
có thể được sử dụng như một số 0
.
Trong khi đó, giống như nhiều ngôn ngữ, PHP coi các giá trị nhất định là "giả" khi chuyển sang boolean - những ngôn ngữ "trực giác" trống rỗng, như bạn nói. Điều đó bao gồm số 0
, cũng như chuỗi trống ''
và mảng trống []
. Trong một if
câu lệnh, biểu thức được truyền rõ ràng thành boolean, do đó, if ( 0 )
giống như if ( false )
.
Đặt hai thứ này lại với nhau, bạn sẽ nhận được một câu hỏi hóc búa: một mặt, như bạn nói '0'
là một chuỗi không trống; mặt khác, chúng tôi đã nói rằng nó có thể được sử dụng như một số 0
, "trống". PHP chọn cách coi "zero-ness" quan trọng hơn "tính nghiêm ngặt", do đó '0'
được coi là "giả mạo".
Tóm lại : '0' == 0 == false
; hoặc là(bool)'0' === (bool)(int)'0'