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

Mari bercakap tentang situasi ralat php7 XOR

PHPz
PHPzasal
2023-03-29 10:13:06455semak imbas

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";
}

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";
}

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";
}

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!

Kenyataan:
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