___ qstnhdr ___ PHP erlaubt ungültigen Code in switch-Anweisungen
___ qstntxt ___
Ich habe Probleme zu verstehen, warum das Folgende in 5.3.3 nicht zu einem Compilerfehler führt (Fehler bei meinen Mitarbeitern 5.2.5):
%Vor%
Anstatt mir einen Compilerfehler (oder sogar eine Warnung) zu geben, gibt es nur folgendes:
%Vor%
Wenn ich es jedoch in einer if-Anweisung verwende, gibt es mir das, was ich erwarten würde:
%Vor%
gibt:
%Vor%
Warum ist das? Gibt es irgendwo eine Einstellung, die ich deaktivieren kann, um zu sagen, dass sie in dieser Sache streng ist?
___ tag123php ___ PHP ist eine weit verbreitete, dynamische, objektorientierte und interpretierte Skriptsprache, die primär für die serverseitige Webentwicklung entwickelt wurde.
___ tag123switchstatement ___ In der Computerprogrammierung ist eine switch-, case-, select- oder inspect-Anweisung eine Art von Auswahlkontrollmechanismus
___ antwort6630482 ___
Es könnte möglicherweise nur als ein anderes Label interpretiert werden (was sinnvoll ist, da theoretisch case
ein Label ist und case
auch als eine spezielle Art von Label interpretiert werden könnte) könnte mit default:
verwendet werden. Probiere }
aus und finde es heraus. Ich würde, aber ich habe nicht PHP 5.3.3, sorry.
Das Problem ist, dass Ihr Code nicht das tut, was Sie denken. Ein defalut
-Block endet erst, wenn der nächste case 2:
-Block auftritt, oder wenn switch (2)
gefunden wird oder wenn der schließende goto
erreicht ist. Dies bedeutet, dass word:
Teil des Blocks goto
ist. So wird es nie auch nur interpretiert.
Es wird jedoch nicht einmal ein Syntaxfehler ausgelöst (nicht einmal, wenn Sie goto defalut;
ausführen. Dies liegt daran, dass switch
Operator wurde in PHP 5.3 eingeführt. Die Syntax case defalut
am Anfang einer PHP-Anweisung ist nun ein Ziel, auf das über %code% zugegriffen werden kann. So kann %code% verwendet werden, um zu gehen das Etikett.
(Eigentlich kann es nicht, wegen einer Beschränkung auf Ziele in %code% Blöcke, um Endlosschleifen zu vermeiden, aber dies sollte den Punkt veranschaulichen ...)
Sie können einen Fehler erzwingen, indem Sie %code% ausführen, wenn der erwartete Fehler gefunden wird.
Interessant, bei meiner 5.3.2 schlägt dies fehl IF es gibt KEINE andere Groß- / Kleinschreibung über der falschen Vorgabe.
Dies endet mit einem Syntaxfehler "T_UNEXPECTED_STRING":
%Vor%
Das funktioniert:
%Vor%
Es scheint, dass Sie einen Fehler im PHP-Parser gefunden haben. Wäre kein ernsthafter Fehler, aber trotzdem ein Fehler.