2 Stimmen

Alternative bedingte Syntax (if-else) schlägt bei PHP 5.3.0 fehl (xampp)

Ich habe vor kurzem ein Upgrade auf xampp v1.7.2 durchgeführt, das PHP 5.3 auf mich losgelassen hat. Damit wurden auch alle meine httpd.confs und php.ini's gelöscht (ich war davon ausgegangen, dass es sich bei dieser Version um ein Upgrade wie bei allen früheren xampp-Versionen handelt). Jedenfalls habe ich eine Weile gebraucht, um alle Dienste neu zu konfigurieren - aber jetzt bin ich auf ein komisches Problem gestoßen.

Dieses selbst geschriebene CMS, das an meinem Arbeitsplatz verwendet wird, verwendet eine Menge der alternativen bedingten Syntax für if-else, d.h.

if( condition ): ?>
    <some html />
<?php else: ?>
    <some other html />
<?php endif;

Mit PHP 5.2.x, das zusammen mit xampp 1.7.1 ausgeliefert wurde, funktionierte dies problemlos - und jetzt erzeugen solche Codeblöcke plötzlich diesen Fehler:

Parse-Fehler: Syntaxfehler, unerwartet T_ELSE in ...

Ich habe mein Skript in keiner Weise verändert - dasselbe funktionierte auch in PHP 5.2.x absolut reibungslos.

Meine Frage ist also, ob PHP 5.3 solche alternativen Bedingungen zulässt? Oder muss ich eine versteckte Option in meinen Konfigurationsdateien einschalten?

Bitte beachten Sie, dass ich keine Shorttags verwende - sie sind hier also kein Thema.

4voto

too much php Punkte 85034

Obwohl sich die if/else-Syntax in 5.3 nicht geändert hat, haben sich viele andere Teile der Syntax geändert. Sie sollten die Zeilen unmittelbar vor der betreffenden else-Anweisung überprüfen, um festzustellen, ob eines der anderen neuen Syntaxmerkmale den Parser verwirrt.

Wenn Sie nicht herausfinden können, wo das Problem liegt, können Sie einfach damit beginnen, systematisch Codezeilen zu löschen, bis Sie nur noch die folgenden drei Zeilen haben:

<?php if(condition): ?>
<?php else: ?>
<?php endif ?>

Aktualisierung: Sie sollten Ihren Code wirklich mit short_open_tag eingeschaltet ist, denn der Syntaxfehler, den Sie sehen, würde auftreten, wenn Sie diesen Code irgendwo hätten:

<? if(condition): ?>
<?php else: ?>
<?php endif ?>

0voto

James Skidmore Punkte 46884

Ja, PHP 5.3 ermöglicht die alternative Syntax für Kontrollstrukturen, einschließlich Ihrer bedingten Anweisungen.

Ich würde vorschlagen, eine Fehlersuche durchzuführen, indem Sie die alternative Syntax an ein oder zwei Stellen durch eine reguläre Syntax ersetzen, um zu sehen, ob das Problem dadurch behoben wird. Wenn dies der Fall ist, wissen Sie sicher, was das Problem ist.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X