Побітові оператори
Побітові оператори модифікують біти задіяних значень. Порозрядне OR
основному ЗОШ разом кожен біт лівий і правий аргумент. Наприклад:
5 | 2
Перекладається в біти / двійковий файл як:
101 | 10
Що призведе до:
111
Оскільки:
1 || 0 = 1
0 || 1 = 1
1 || 0 = 1
І як ціле число це представлення 7, яке саме те, що ви отримуєте, якщо:
echo 5 | 2;
За словами Едді Ізарда ... Прапор!
Як зазначає Ігнасіо, це найчастіше використовується в PHP (та інших мовах) як спосіб поєднання декількох прапорів. Кожен прапор зазвичай визначається як константа, значення якої зазвичай встановлюється цілим числом, яке представляє лише один біт з різним зміщенням:
define('FLAG_A', 1);
define('FLAG_B', 2);
define('FLAG_C', 4);
define('FLAG_D', 8);
Тоді, коли ви OR
разом, вони працюють кожен зі своїм зміщенням і ніколи не зіткнуться:
FLAG_A | FLAG_C
Перекладається на:
1 | 100
Отже, ви в кінцевому підсумку вмикаєте:
101
Що представляє ціле число 5.
Тоді весь код, який повинен зробити - код, який буде реагувати на різні прапори, що встановлюються - є наступним (з використанням побітового розряду AND
):
$combined_flags = FLAG_A | FLAG_C;
if ( $combined_flags & FLAG_A ) {
}
if ( $combined_flags & FLAG_B ) {
}
if ( $combined_flags & FLAG_C ) {
}
Зрештою це просто полегшує читання, називаючи константи, і, як правило, більш оптимальним, спираючись на цілі значення, а не на рядки чи масиви. Ще одна перевага використання констант полягає в тому, що якщо вони коли-небудь неправильно вводяться при використанні, компілятору випадає краща ситуація, коли він повідомляє і видає попередження ... якщо використовується значення рядка, він не може знати, що щось не так.
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' );