Mailinglisten-Archive |
Hallo Michael, Am Mittwoch, 28. Juni 2006 11:01 schrieb Michael Borchers: > $i=10; > $j=5; > > echo $i."+".$j."=".$i+$j; > > > das resultat: 15. schock. nach längerem probieren erreichen wir > mittels > > echo $i."+".$j."=".($i+$j); ich weiß nicht, ob ich mir hier gerade die richtige Lösung erarbeitet habe, trotzdem hier mein Erklärungsversuch: Das Sprachkonstrukt echo kann einen oder mehrere Parameter übergeben bekommen. Aus meiner Sicht sind daher nur der Punkt für die Zusammensetzung von Zeichen(ketten) und das Komma zur Trennung der Parameter in dem Konstrukt erlaubt. Daher ist meine erste Schlußfolgerung, daß das freistehende Pluszeichen normalerweise zu einem Syntaxfehler führen müßte. Da dieser aber nicht auftritt, scheint echo also hinzugehen und diesen Fehler nach einer internen Logik zu korrigieren. Es scheint den Teil, der eigentlich in Klammern gesetzt werden müßte ($i+$j), bei Deiner fehlerhaften Konstruktion als ersten und einzigen gültigen Parameter von echo zu betrachten. Diese Überlegung stützt aus meiner Sicht das Ergebnis des Befehls echo $i."+".$j."=".$i+$j, ' - huhu'; Die Ausgabe ist nämlich dann 15 - huhu Die Schreibweise, die den Syntaxfehler korrigiert, den Dein Befehl enthält, lautet folglich: echo $i."+".$j."=", $i+$j; Oder eben alternativ wie Dein zweiter Befehl mit Klammerung. Das Phänomen hat also nichts mit der Operatorenreihenfolge ( http://www.php.net/manual/en/language.operators.php#language.operators.precedence ) zu tun, wie ich zunächst vermutet hatte und wie Du wohl indirekt auch vermutet hast, wie Dein Lösungsansatz mit der Klammerung vermuten läßt. Auf jeden Fall zeigt dieser Fall wieder, daß eine saubere Programmierung niemals mit sinnvoller, logischer Klammerung sparen sollte. So wird der Code sowohl für den Programmierer als auch für PHP eindeutig(er). Viele Grüße Lutz
php::bar PHP Wiki - Listenarchive