Quakenet/#php Tutorial

Hinweis: Wenn sie diese Seite von einer externen URL aufgerufen haben achten sie darauf das alle Kapitel aufeinander aufbauen. Stellen sie daher sicher dass sie alle vorherigen Kapitel gelesen haben, da sie sonst relevante Informationen übersehen.

Logische Verknüpfungen

  1. Verbinden von unterschiedlichen Bedingungen
  2. AND-Verknüpfung
  3. OR-Verknüpfung
  4. NOT-Operator
  5. NAND-Verknüpfung
  6. NOR-Verknüpfung
  7. XOR-Verknüpfung
  8. XNOR-Verknüpfung
  9. Vereinfachungsregeln

1. Verbinden von unterschiedlichen Bedingungen

Eine Überprüfung eines Sachverhalts ist manchmal aus mehreren unabhängigen Bedingungen zusammengesetzt. In PHP können diese atomaten Bedingungen (z.B. Vergleiche oder schon vorher berechnete boolische Ausdrucke) miteinander kombiniert werden um eine gewünschte Abfrage zu erhalten. Theoretisch gibt es für 2 Variablen 16 verschiedene Funktionen, die für 2 Werte true oder false zurückliefern. In der realen Welt verwendet man üblicherweise nur 7 solcher Kombinationen/Funktionen die sich in 3 Grundkombinationen und 4 erweiterte Kombinationen aufteilen. PHP implementiert davon 4, alle anderen Kombinationen können jedoch aus Kombinationen dieser Grundfunktionen von Hand dargestellt werden.

2. AND-Verknüpfung

Die AND-Verknüpfung ist die einfachste logische Verknüpfung. Das Ergebnis solch einer Verknüpfung liefert true wenn beide Argumente true sind. Im Sprachgebrauch verwendet man AND intuitiv genau so, wie z.B. bei Du darfst draußen spielen wenn du deine Hausaufgaben gemacht hast und dein Zimmer aufgeräumt ist. In PHP wird diese Verknüpfung mit dem AND-Operator realisiert.

<?php
$var 
false and false;  // erzeugt false
$var false and true;   // erzeugt false
$var true  and false;  // erzeugt false
$var true  and true;   // erzeugt true
$spielen $hausaufgaben_fertig and $zimmer_aufgeraeumt;
?>

Dies kann man auch in einer Wahrheitstabelle darstellen, eine gängige Entwurfstechnik.

Wahrheitstabelle von AND
Argument 1 (A) Argument 2 (B) Ergebnis (Q)
0 0 0
0 1 0
1 0 0
1 1 1

In der Digitaltechnik verwendet man besondere Diagramme die diese Verkettungen benutzen. Eine AND-Verknüpfung hat z.B. folgende Darstellung.

AND-Verknüpfung als Schaltzeichen Abb.:AND-Verknüpfung als Schaltzeichen

Anhand des &-Zeichen erkennt man auch dass es sich hierbei um eine AND-Verknüpfung ist. Links sind die beiden Eingänge (könnten übrigens auch mehr sein, PHP kann jedoch nur 2 verwalten) A und B und rechts ist der Ausgang Q.

3. OR-Verknüpfung

Eine OR-Verknüpfung ist die zweite Standardverknüpfung in PHP der mit dem Schlüsselwort or realisiert wird. Der natürliche Sprachgebrauch ist jedoch irreführend bei einer OR-Verknüpfung. Eine Fußgängerampel schaltet auf grün wenn der eine Knopf oder der andere Knopf gedrückt wird. Umbewusst spricht man hier jedoch von einem exklusiven Ausschluss, entweder den einen oder den anderen Knopf drücken. Jedoch würde die Ampel rein theoretisch auch schalten, wenn beide Knöpfe gleichzeitig gedrückt werden. Und so arbeitet auch der or-Operator. Er liefert true wenn mindestens einer der beiden Werte/Parameter true sind.

<?php
$var 
false or false// liefert false
$var false or true;  // liefert true
$var true  or false// liefert true
$var true  or true;  // liefert true

$gruen_schalten $knopf1 or $knopf2;
?>

Die Wahrheitstabelle sieht wie folgt aus

Wahrheitstabelle der OR-Verknüpfung
Argument 1 (A) Argument 2 (B) Ergebnis (Q)
0 0 0
0 1 1
1 0 1
1 1 1

In der Digitaltechnik verwendet man folgendes Schaltzeichen.

OR-Verknüpfung als Schaltzeichen Abb.:OR-Verknüpfung als Schaltzeichen

Wenn man die Eingänge mit 0 oder 1 belegt, sieht man den Sinn an >=1. Wenn man also die Eingünge zusammen addiert so muss man mit der Summe über 0 kommen damit am Ausgang eine 1 kommt.

4. NOT-Operator

Der NOT-Operator ist ein Operator der nur einen Wert benötigt, nicht wie die anderen beiden Operatoren zwei. Daher gibt es auch nur 2 mögliche Kombinationen, entweder der Wert für den Parameter ist true oder false. In PHP wird dieser Operator mit dem Zeichen ! erzeugt, der zu prüfende Wert wird dann dahinter geschrieben. Das Ergebnis dieses Operators ist die Negation vom verwendeten Wert. Also aus true wird false und umgekehrt. Nehmen wir als Beispiel eine Laplace-Münze. Diese fällt entweder auf Kopf oder Zahl. Wenn sie auf Kopf fällt kann sie nicht auf Zahl fallen und umgekehrt.

<?php
$ist_kopf 
= !$ist_zahl;
?>

Dieses ! hat man schon bei den Vergleichsoperatoren != und !== kennengelernt. Letzendlich könnte man diese Operatoren auch wie folgt schreiben.

<?php
$var 
$x != $y;    // mit !=
$var = !($x == $y); // mit !(==) (Klammer sind nötig sonst wird nur die Variable $x negiert)
?>

Die Wahrheitstabelle fällt entsprechend kürzer aus.

Wahrheitstabelle des NOT-Operators
Argument (A) Ergebnis (Q)
0 1
1 0

In der Digitaltechnik wird folgendes Schaltzeichen verwendet.

NOT-Verknüpfung als Schaltzeichen Abb.:NOT-Verknüpfung als Schaltzeichen

Wichtig hierbei ist nicht die 1 (das ist mehr oder weniger ein neutrales Element wie die 1 für eine Multiplikation oder 0 für eine Addition) sondern der kleine Kreis hinter dem Schaltzeichen. Er zeichnet die eigentliche Negation an, in diesem Fall am Ausgang des Elements. Dies heißt auch das der Kreis für ein Eingang verwendet werden kann, dass das logische Signal (1/0 bzw. true/false) negiert.

5. NAND-Verknüpfung

Neben den 3 Grundverknüpfungen ist NAND ein erweiterte Verknüpfung. Sie wird aus den Grundverknüpfungen AND und NOT gebildet. In PHP gibt es kein solchen Operator kann aber entsprechend zusammengebaut werden.

<?php
$check 
= !($var1 and $var);    // AND -> NOT = NAND
$check = !$var1 and $var;      // kein NAND, hier wird erst $var1 negiert und
                               // dann zu 'and' gepackt.
?>

In der Digitaltechnik wird folgendes Schaltzeichen verwendet.

NAND-Verknüpfung als Schaltzeichen Abb.:NAND-Verknüpfung als Schaltzeichen

Anhand des Schaltzeichens erkennt man auch die Verkettung der Verknüpfungen AND und NOT. Die Tabelle zeigt auch die interne Verkettung dieser Operatoren.

Wahrheitstabelle des NAND-Operators
Argument 1 (A) Argument 2 (B) Ergebnis (Q)
0 0 1
0 1 1
1 0 1
1 1 0

6. NOR-Verknüpfung

Die NOR-Verknüpfung ist eine weitere erweiterte Verknüpfung, die selbe wie NAND nur in grün, also OR und NOT verkettet. PHP kennt für diese Art der Verknüpfung auch keinen eigenen Operator und wird entsprechend auch mit or und ! erzeugt.

<?php
$check 
= !($var1 or $var);    // OR -> NOT = NOR
$check = !$var1 or $var;      // kein NOR, hier wird erst $var1 negiert und
                               // dann zu 'or' gepackt.
?>

Und auch in der Digitaltechnik verwendet man die selbe Idee wie beim NAND.

NOR-Verknüpfung als Schaltzeichen Abb.:NOR-Verknüpfung als Schaltzeichen

Die Wahrheitstabelle ist auch entsprechend aufgebaut.

Wahrheitstabelle des NOR-Operators
Argument 1 (A) Argument 2 (B) Ergebnis (Q)
0 0 1
0 1 0
1 0 0
1 1 0

7. XOR-Verknüpfung

Die dritte erweiterte Verknüpfung ist die XOR-Verknüpfung. Sie arbeitet wie eine OR-Verknüpfung, jedoch darf nur ein Wert true sein. Wenn beide Werte true sind liefert diese Verknüpfung false.

<?php
$check 
= ($var1 and !$var2) or (!$var1 and $var2);
?>

Da niemand bereit ist so eine Verkettung von bereits vorhandenen Verknüpfungen hinzuschreiben gibt es in PHP dafür die Verknüpfungszeichenkette xor. Das x steht dabei für exclusive.

<?php
$check 
false xor false;  // false
$check true  xor false;  // true
$check false xor true;   // true
$check true  xor true;   // false

$geschlecht_gueltig $ist_m xor $ist_w;
?>

In der Digitaltechnik gibt es auch ein eigenes Schaltzeichen.

XOR-Verknüpfung als Schaltzeichen Abb.:XOR-Verknüpfung als Schaltzeichen

Das =1 deutet an, dass die Summe nur 1 sein darf (wenn man denn im Kopf die Werte zusammenaddiert). Dies entspricht also genau dem Verhalten einer XOR-Verknüpfung.

Wahrheitstabelle des XOR-Operators
Argument 1 (A) Argument 2 (B) Ergebnis (Q)
0 0 0
0 1 1
1 0 1
1 1 0

8. XNOR-Verknüpfung

Die XNOR-Verknüpfung ist wiederum sehr einfach. Es ist einfach eine Negation der XOR-Verknüpfung, wird genauso realisiert und genauso dargestellt.

<?php
$check 
= !(false xor false); // true
$check = !(false xor  true); // false
$check = !(true  xor false); // false
$check = !(true  xor true ); // true
?>

Das Schaltzeichen in der Digitaltechnik sieht dann entsprechend aus.

XNOR-Verknüpfung als Schaltzeichen Abb.:XNOR-Verknüpfung als Schaltzeichen

Und die Wahrheitstabelle auch.

Wahrheitstabelle des XNOR-Operators
Argument 1 (A) Argument 2 (B) Ergebnis (Q)
0 0 1
0 1 0
1 0 0
1 1 1

9. Vereinfachungsregeln

In der Digitaltechnik gibt es einige Rechenregeln mit denen man längere boolische Ausdrücke vereinfachen kann. Diese kann man ggf. auch auf PHP-Skripte anwenden.

<?php
$check 
true  and $var/* ist das selbe wie: */ $check $var;  // da das true 'nichts bringt'
$check false and $var/* ist das selbe wie: */ $check false// da bereits ein false drin ist
$check true  or  $var/* ist das selbe wie: */ $check true;  // da bereits ein true drin ist
$check false or  $var/* ist das selbe wie: */ $check $var;  // da das false 'nichts bringt'
?>

Dann gibt es z.B. noch sowas wie Doppelnegation.

<?php
$check 
= !(!$check); // ähnlich wie 'minus mal minus ergibt plus'
?>

Wichtiger sind jedoch die De Morgansche Gesetze. Bei einem bestimmten Aufbau von einer AND- oder OR-Verknüpfung kann man diese Verknüpfungen in eine OR- oder AND-Verknüpfung umschreiben.

<?php
$check 
= !$var1 and !$var2;
$check = !($var1 or $var2); // das gleiche

$check = !($var1 and $var2);
$check = !$var1 or !$var2;  // das gleiche
?>

Man zieht also die Negation rein bzw. raus und muss dabei die Verknüpfung von AND auf OR (bzw. umgekehrt) ändern. Dies macht man in seinen Skripten um die Lesbarkeit zu erhöhen.

<?php
$ueberspringen 
= !(('.' != $var) and ('..' != $var));   // was prüf ich hier nun? es soll nicht gleichzeitig zwei werte gelten? hä?
$ueberspringen = !(!(('.' == $var) or ('..' == $var))); // doppelnegation auflösen
$ueberspringen = ('.' == $var) or ('..' == $var);       // achso... das ist lesbarer...
?>

Fragen zum Kapitel

Keine Fragen zum Kapitel vorhanden

Zurück zu Weiter zu
Copyright © bei den OPs von #php.de/QuakeNet Valid XHTML 1.0 Strict Valid CSS!