2017-08-07 2 views
1

Ich habe etwas PHP-Code überprüft und einen Block bedingter Anweisungen gefunden, den ich nicht verstehen konnte.Was bedeutet diese Bedingung?

 if ($options['mentionbbcode'] & 8) { 
       $final_rendered .= '<span class="highlight">'; 
     } 
    if ($options['mentionbbcode'] & 4) { 
       $final_rendered .= '<i>'; 
     } 

    if ($options['mentionbbcode'] & 2) { 
       $final_rendered .= '<b>'; 
     } 

was ist der Unterschied zwischen diesen drei conditionals .. sollten sie nicht alle wahr zurück, wenn $options['mentionbbcode'] gesetzt? Was ist die Rolle des Integer-Wertes hier?

+1

Werfen Sie einen Blick auf [bitweise Operatoren] (http://php.net/manual/en/language.operators.bitwise.php). –

+0

Danke für die Antwort, könnten Sie mir ein Beispiel geben, wo diese Aussage wahr und eine andere, wo es falsch zurückgeben wird? –

Antwort

1

Das ist a bitwise and operation.

So zum Beispiel, wenn $value = $var & 8 verwenden, wird $value eine Zahl sein, für die die Bits, die sowohl 1 in sind $var und 8 sind auch 1 in den neuen Wert.

In Ihrem Fall testen diese Bedingungen, ob ein bestimmtes Bit für den Wert gesetzt ist, das 4., 3. und 2., um korrekt zu sein.

Update:
Hier sind einige Beispiele von Ergebnissen mit unterschiedlichen Werten für die erste Bedingung. Es testet, ob das vierte Bit von rechts gesetzt ist.

12 & 8 // true (01010 & 01000 => 01000) 
15 & 8 // true (01111 & 01000 => 01000) 
7 & 8 // false (00111 & 01000 => 00000) 
17 & 8 // false (10001 & 01000 => 00000) 

Solange ein Bit in einer Reihe gesetzt ist, wird PHP dies als wahr interpretieren.

+0

Vielen Dank für die Antwort, könnten Sie mir ein Beispiel geben, wo diese Aussage wahr und eine andere, wo es false zurückgeben wird? –

+0

Ich habe einige Beispiele für bitweise Berechnungen hinzugefügt – Jerodev