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'