Rumah > pembangunan bahagian belakang > masalah PHP > Mari bercakap tentang situasi ralat php7 XOR

Mari bercakap tentang situasi ralat php7 XOR

PHPz
Lepaskan: 2023-03-29 10:29:54
asal
469 orang telah melayarinya

Pengendali XOR PHP7 mungkin menyebabkan ralat dalam beberapa kes. Artikel ini akan memperkenalkan anda kepada penggunaan operator XOR dan situasi yang boleh menyebabkan ralat.

Pertama, mari kita lihat operator XOR (^) dalam PHP. Pengendali XOR mengembalikan hasil di mana hanya satu daripada dua operan adalah benar. Sebagai contoh, 1^0 mengembalikan 1 kerana salah satu operan adalah benar. 1^1 akan mengembalikan 0 kerana kedua-dua operan adalah benar.

Sebelum PHP7, pengendali XOR berkelakuan sebagai XOR bitwise untuk dua operan rentetan, manakala dalam PHP7, ia dianggap tidak sah untuk operan rentetan dan mengembalikan FALSE.

Walau bagaimanapun, dalam sesetengah kes, pengendali XOR mungkin menyebabkan hasil yang tidak dijangka disebabkan oleh penaipan PHP yang lemah.

Sebagai contoh, pertimbangkan kod berikut:

$a = "1 and 2";
$b = "0b10";

if ($a ^ $b) {
    echo "TRUE";
} else {
    echo "FALSE";
}
Salin selepas log masuk

Dalam contoh ini, $a ialah rentetan "1 dan 2" dan $b ialah rentetan "0b10", yang Ditafsirkan sebagai nombor binari 2. Dalam kes ini, operator XOR menukar operan kepada nombor dan kemudian melakukan operasi XOR bitwise. Oleh itu, coretan kod ini akan mengeluarkan "TRUE" dan bukannya "FALSE" kerana hasil 1^2 ialah 3 dan ungkapan bersyarat ini akan dianggap sebagai BENAR.

Begitu juga, ralat aneh mungkin berlaku apabila pemprosesan mengandungi nilai NULL. Contohnya:

$a = "hello";
$b = NULL;

if ($a ^ $b) {
    echo "TRUE";
} else {
    echo "FALSE";
}
Salin selepas log masuk

Dalam contoh ini, $b ialah nilai NULL, jadi coretan akan mengeluarkan "TRUE" kerana "hello" akan ditukar kepada 0 dan hasil 0^NULL masih 0.

Untuk mengelakkan ralat ini, penukaran jenis eksplisit hendaklah sentiasa digunakan. Sebagai contoh, tukar operan rentetan kepada integer secara eksplisit:

$a = "1 and 2";
$b = "0b10";

if ((int)$a ^ (int)$b) {
    echo "TRUE";
} else {
    echo "FALSE";
}
Salin selepas log masuk

Dalam contoh ini, kami menukar $a dan $b kepada integer dan kemudian XOR mereka bersama-sama. Ini akan memastikan bahawa hanya dua integer adalah XORed bitwise.

Ringkasnya, pengendali XOR PHP7 mungkin menyebabkan hasil yang tidak dijangka kerana ia menukar rentetan kepada nombor dan melakukan operasi XOR bitwise. Untuk mengelakkan ralat ini, anda harus menggunakan penukaran jenis eksplisit.

Atas ialah kandungan terperinci Mari bercakap tentang situasi ralat php7 XOR. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan