PHP dirancang (atau, lebih tepatnya, dikembangkan) untuk digunakan dengan permintaan web, tempat Anda sering berurusan dengan input string (parameter URL, atau permintaan POST dari formulir di browser). Dengan demikian, secara otomatis akan melemparkan string ke tipe lain.
Contoh sederhana dari ini adalah yang '1' + '2'
memberi 3
, bukan kesalahan, atau '12
', atau beberapa interpretasi lainnya. Dengan logika yang sama, string '0'
dapat digunakan sebagai numerik 0
.
Sementara itu, seperti banyak bahasa, PHP memperlakukan nilai-nilai tertentu sebagai "falsy" ketika dilemparkan ke boolean - yang secara intuitif "kosong", seperti yang Anda katakan. Itu termasuk numerik 0
, serta string kosong ''
dan array kosong []
. Dalam sebuah if
pernyataan, ekspresi secara eksplisit dilemparkan ke boolean, jadi if ( 0 )
sama dengan if ( false )
.
Menyatukan kedua hal ini, Anda mendapatkan teka-teki: di satu sisi, seperti yang Anda katakan '0'
adalah string yang tidak kosong; di sisi lain, kita telah mengatakan bahwa itu dapat digunakan sebagai numerik 0
, yaitu "kosong". PHP memilih untuk memperlakukan "zero-ness" sebagai lebih penting daripada "stringiness", sehingga '0'
dianggap "falsy".
Singkatnya '0' == 0 == false
:; atau(bool)'0' === (bool)(int)'0'