Hauptmenü

Untermenü

PHP - Grundlagen - Operatoren - Assoziativität

1. Links- und Rechtsdrehend

... kennt ihr möglicherweise von diversen Joghurts her. Bei PHP gibt es etwas Ähnliches, nur dreht sich da nichts. Bei der so genannten Assoziativität handelt es sich um ein Verarbeitungsverfahren, das regelt, wie gleich gewichtete Operatoren behandelt werden.

Das Prinzip

Bei gleich gewichteten Operatoren mit einer linken Assoziativität wird von links nach rechts abgearbeitet. Das kennt ihr mit Sicherheit noch vom Matheunterricht und ist eigentlich zu banal, um darauf hinzuweisen. Bis auf eine Ausnahme gilt dies für alle Operatoren.


<?php
  // Ergibt 10
  echo 12 6;
  // Ergibt 24
  echo 12 6;
?>

Bei den Inkrement- und Dekrementoperatoren dagegen haben wir es mit einer rechten Assoziativität zu tun. Das bedeutet einfach gesagt, dass sie vorrangig bearbeitet wird.


<?php
  // Ergibt auch 10
  $a 4;
  echo 12 * ++$a 6;
?>

Dieses Beispiel müsst ihr euch so vorstellen. Zuerst erkennt PHP die 12. Dann folgt der Prä-Inkrementoperator und hier springt dann der Parser zuerst nach rechts zum $a und führt das ++ aus. Danach hüpft er wieder nach links zur 12 und berechnet die Plutimikation, äh Multiplikation beider Zahlen. Dann geht es weiter zur 6.

2. Die Feinheiten

Eigentlich würde es sich um eine ziemlich banale Sache handeln, wenn es da nicht einen Problemfall gäbe. Nämlich bei der Verkettung von Strings und Berechnungen. Hier muss man höllisch aufpassen, sonst kann man böse auf die Fresse fallen. Was glaubt ihr, wird bei dem folgenden Beispiel ausgegeben?


<?php
  $a 4;
  $b 3;
  echo 'ich habe noch '.$a $b.' Tage Resturlaub.';
?>

Überraschung

Das Ergebnis lautet doch tatsächlich "3 Tage Resturlaub."! Und wieso? Nun, der Verknüpfungs- und Additionsoperator haben eine gleiche Wertigkeit. Also passiert das hier. Zuerst wird eine normale Zeichenkettenverknüpfung vorgenommen ('ich habe noch '.$a). Das Resultat ist dann "Ich habe noch 4". Anschließend soll aber eine Addition mit dem Wert von $b durchgeführt werden. Da der schon abgearbeitete Teil ein String ist, sagt sich PHP, damit kann ich nicht rechnen, ich mach da eine 0 raus. So, 0 + 3 ist 3 und dann wird der zweite String angehängt. Mit dem schon erwähnten Ergebnis.

Die Lösung


<?php
  $a 4;
  $b 3;
  echo 'ich habe noch '.($a $b).' Tage Resturlaub.';
?>

zurück zum vorherigen Abschnitt weiter zum nächsten Abschnitt