Bitweise Operatoren
Bitweise Operatoren ändern die Bits der beteiligten Werte. Ein bitweises OR
ODER verknüpft im Grunde jedes Bit des linken und rechten Arguments. Zum Beispiel:
5 | 2
Würde in Bits / Binär übersetzen als:
101 | 10
Was dazu führen würde:
111
Weil:
1 || 0 = 1
0 || 1 = 1
1 || 0 = 1
Und als Ganzzahl ist dies die Darstellung von 7, die genau das ist, was Sie erhalten, wenn Sie:
echo 5 | 2;
In den Worten von Eddie Izzard ... Flagge!
Wie Ignacio feststellt, wird dies am häufigsten in PHP (und anderen Sprachen) verwendet, um mehrere Flags zu kombinieren. Jedes Flag wird normalerweise als Konstante definiert, deren Wert normalerweise auf eine Ganzzahl gesetzt wird, die nur ein Bit mit einem anderen Offset darstellt:
define('FLAG_A', 1);
define('FLAG_B', 2);
define('FLAG_C', 4);
define('FLAG_D', 8);
Wenn Sie OR
diese dann zusammen haben, arbeiten sie jeweils mit ihrem eigenen Bitversatz und werden niemals kollidieren:
FLAG_A | FLAG_C
Wird übersetzt in:
1 | 100
Am Ende schalten Sie sich ein:
101
Welches repräsentiert die ganze Zahl 5.
Dann muss der Code nur noch Folgendes tun (der Code, der auf die verschiedenen gesetzten Flags reagiert) (bitweise AND
):
$combined_flags = FLAG_A | FLAG_C;
if ( $combined_flags & FLAG_A ) {
}
if ( $combined_flags & FLAG_B ) {
}
if ( $combined_flags & FLAG_C ) {
}
Letztendlich erleichtert es das Lesen der Dinge durch benannte Konstanten und ist im Allgemeinen optimaler, wenn man sich auf ganzzahlige Werte anstatt auf Zeichenfolgen oder Arrays stützt. Ein weiterer Vorteil der Verwendung von Konstanten besteht darin, dass der Compiler, wenn sie bei der Verwendung jemals falsch eingegeben werden, besser in der Lage ist, eine Warnung zu erkennen und auszulösen. Wenn ein Zeichenfolgenwert verwendet wird, kann er nicht erkennen, dass etwas nicht stimmt.
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' );