Operatory bitowe
Operatory bitowe modyfikują bity odpowiednich wartości. Bitowe w OR
zasadzie OR łączy razem każdy bit lewego i prawego argumentu. Na przykład:
5 | 2
Przetłumaczyłoby się na bity / binarne jako:
101 | 10
Co spowodowałoby:
111
Dlatego:
1 || 0 = 1
0 || 1 = 1
1 || 0 = 1
I jako liczba całkowita, która jest reprezentacją liczby 7, która jest dokładnie tym, co otrzymujesz, jeśli:
echo 5 | 2;
Słowami Eddiego Izzarda… Flaga!
Jak stwierdza Ignacio, jest to najczęściej używane w PHP (i innych językach) jako sposób łączenia wielu flag. Każda flaga jest zwykle definiowana jako stała, której wartość jest zwykle ustawiana na liczbę całkowitą reprezentującą tylko jeden bit w innym przesunięciu:
define('FLAG_A', 1);
define('FLAG_B', 2);
define('FLAG_C', 4);
define('FLAG_D', 8);
Wtedy, kiedy to zrobisz OR
razem, działają one na swoim własnym bitowym przesunięciu i nigdy się nie zderzają:
FLAG_A | FLAG_C
Przetłumaczyć na:
1 | 100
Więc w końcu włączasz:
101
Która reprezentuje liczbę całkowitą 5.
Następnie wszystko, co musi zrobić kod - kod, który będzie reagował na różne ustawiane flagi - jest następujące (używając bitowej AND
):
$combined_flags = FLAG_A | FLAG_C;
if ( $combined_flags & FLAG_A ) {
}
if ( $combined_flags & FLAG_B ) {
}
if ( $combined_flags & FLAG_C ) {
}
Pod koniec dnia po prostu ułatwia to czytanie, ponieważ ma nazwane stałe i ogólnie jest bardziej optymalne, polegając na wartościach całkowitych, a nie na łańcuchach lub tablicach. Inną zaletą używania stałych jest to, że jeśli zostaną one kiedykolwiek wpisane błędnie, kompilator jest w lepszej sytuacji, aby o tym powiedzieć i rzucić ostrzeżenie ... jeśli zostanie użyta wartość ciągu, nie ma możliwości dowiedzenia się, że coś jest nie tak.
define('MY_FLAG_WITH_EASY_TYPO', 1);
my_function_that_expects_a_flag( MY_FLAG_WITH_EASY_TPYO );
my_function_that_expects_a_flag( 'my_string_with_easy_tpyo' );