PHP ได้รับการออกแบบ (หรือค่อนข้างพัฒนา) สำหรับใช้กับคำขอของเว็บซึ่งคุณมักจะติดต่อกับอินพุตสตริง (พารามิเตอร์ URL หรือคำขอ POST จากฟอร์มในเบราว์เซอร์) ดังนั้นมันจะส่งสตริงไปยังประเภทอื่นโดยอัตโนมัติ
ตัวอย่างง่ายๆของเรื่องนี้คือการ'1' + '2'ให้3ไม่ใช่ข้อผิดพลาดหรือ'12'หรือการตีความอื่น ๆ ด้วยตรรกะเดียวกันสตริง'0'สามารถใช้เป็นตัวเลข0ได้
ในขณะเดียวกันเช่นหลายภาษา PHP ถือว่าค่าบางอย่างเป็น "เท็จ" เมื่อส่งไปยังบูลีน - คนที่ "ว่างเปล่า" อย่างสังหรณ์ใจตามที่คุณพูด ซึ่งรวมถึงตัวเลข0เช่นเดียวกับสตริงที่ว่างเปล่าและอาร์เรย์ที่ว่างเปล่า'' []ในการifสั่งการแสดงออกอย่างชัดเจนถูกโยนไปบูลจึงเป็นเช่นเดียวกับif ( 0 )if ( false )
เมื่อรวมสองสิ่งนี้เข้าด้วยกันคุณจะได้รับปริศนา: ในแง่หนึ่งอย่างที่คุณบอกว่า'0'เป็นสตริงที่ไม่ว่างเปล่า ในทางกลับกันเราได้กล่าวว่ามันสามารถใช้เป็นตัวเลข0ซึ่งเป็น "ว่าง" PHP เลือกที่จะรักษา "zero-ness" สำคัญกว่า "stringiness" ดังนั้น'0'ถือว่าเป็น "เท็จ"
ในระยะสั้น: '0' == 0 == false; หรือ(bool)'0' === (bool)(int)'0'