Saya memiliki potongan kode berikut:
$item['price'] = 0;
/* Code to get item information goes in here */
if($item['price'] == 'e') {
$item['price'] = -1;
}
Ini dimaksudkan untuk menginisialisasi harga item ke 0 dan kemudian mendapatkan informasi tentangnya. Jika harga diinformasikan sebagai 'e' itu berarti pertukaran, bukan penjualan, yang disimpan dalam database sebagai angka negatif.
Ada juga kemungkinan untuk meninggalkan harga sebagai 0, baik karena item tersebut adalah bonus atau karena harga akan ditetapkan nanti.
Namun, setiap kali harga tidak disetel, yang meninggalkannya dengan nilai awal 0, if
loop yang ditunjukkan di atas mengevaluasi sebagai benar dan harga disetel ke -1. Artinya, ia menganggap 0 sama dengan 'e'.
Bagaimana ini bisa dijelaskan?
Jika harga diberikan sebagai 0 (setelah inisialisasi), perilakunya tidak menentu: terkadang if dievaluasi sebagai benar, terkadang dievaluasi sebagai salah. *
if((string)$item['price'] == 'e')
memperbaiki perilaku aneh. Lihat stackoverflow.com/a/48912540/1579327 untuk lebih jelasnya