dedlfix: Verschachtelte php-Routinen

Beitrag lesen

Tach!

Die "unexpected $end"-Fehlermeldung[1] würde nur dann kommen, wenn nach der require-Zeile kein Code mehr käme.
<?php
require ...b.shtml
?>
Ist das nicht genau der Fall?

Ja, in dem Fall wäre das richtig, aber ich red mich mal so raus: Der OP hat nicht angegeben, in welcher der Datei der Fehler auftrat und vielleicht war es ja im Original richtig und nur falsch zitiert.

Wenn der Parser nicht zu erst das fehlende Semikolon bemerken würde, müsste er doch wegen dem '...b.shtml' meckern.

Wir nehmen mal an, dass der OP wirklich require foo.bar stehen hat, also den Dateinamen ohne Anführungszeichen. Der Parser weiß nicht, dass da ein Semikolon fehlt. Für PHP ist es kein wirklicher Fehler, wenn ein String nicht in Anführungszeichen steht. PHP wird zuerst versuchen, foo als Konstante aufzulösen. Gibt es keine solche, nimmt es an, man meinte einen String und dazu eine Notice werfen. Dann kommt der Punkt, der hier, weil er nicht innerhalb eines Stringliterals steht, als Stringverknüpfungsoperator wirkt. bar wird nach demselben Prinzip auch wieder ein String. Jedenfalls könnten nun noch weitere Stringverküpfungen folgen (egal ob mit oder ohne Anführungszeichen), auch in nachfolgenden Zeilen. Das muss der Parser ja auch korrekt erkennen können. Er darf also nicht nur nach dem Semikolon Ausschau halten. Und deshalb kann er auch nicht einfach sagen, dass dieses fehlt, es könnte ja auch ein Punkt fehlen. Die Programmierer haben nun in den Fehlermeldungen nicht alle Möglichkeiten angeführt, weil diese unter Umständen ziemlich viele sein können, stattdessen steht da nur "unerwartetes Einzelding".

dedlfix.