Hat jemand ein T_PAAMAYIM_NEKUDOTAYIM
?
Warum wäre eine Konstante leer?
Hat jemand ein T_PAAMAYIM_NEKUDOTAYIM
?
Schöne Frage: Dies ist nur ein Beispiel, wenn jemand anderes in diese Fehler-Situation gerät, zeige ich nur, dass es auch möglich sein wird :)
@Don't Panic: Warum nicht? empty() testet nicht nur, ob eine Variable existiert, sondern auch, ob ihr Wert "leer" ist (im Fall von PHP ist auch eine Null (0) leer). Eine solche Konstante könnte einen Wert darstellen, der vom Benutzer geändert werden soll - wie DB-Einstellungen oder einige Wahrheits- / Falschwerte und andere Werttypen, die der Code-Entwickler zur Designzeit nicht kennt. Dies ist bei APIs oder Code-Frameworks üblich. Ich verstehe einfach nicht, warum die Entwickler des Zend-Parsers nicht ein gebräuchliches Wort verwendet haben, das jeder kennt und versteht, sondern stattdessen einige hebräische Wörter. Ich meine, es ist noch nicht einmal wirklich lustig oder so.
Bearbeiten: Leider ist seit PHP 8.0 die Antwort nicht mehr "Nein, nicht mehr so". Dieses RFC wurde nicht wie erhofft angenommen, um T_PAAMAYIM_NEKUDOTAYIM
in T_DOUBLE_COLON
zu ändern; aber es wurde abgelehnt.
Hinweis: Ich behalte diese Antwort aus historischen Gründen bei. Tatsächlich habe ich diese Antwort aufgrund der Erstellung des RFCs und des Abstimmungsverhältnisses zu einem bestimmten Zeitpunkt erstellt. Außerdem behalte ich sie in der Hoffnung, dass sie in naher Zukunft akzeptiert wird.
Für mich ist das innerhalb einer Klassenfunktion passiert.
In PHP 5.3 und höher hat $this::$defaults
gut funktioniert; als ich den Code in einen Server eingefügt habe, der aus irgendeinem Grund eine niedrigere Versionsnummer hatte, wurde dieser Fehler geworfen.
Die Lösung in meinem Fall war, das Schlüsselwort self
anstelle von $this
zu verwenden:
self::$defaults
funktioniert einwandfrei.
Dies ist mir gerade bei einer Zeichenkettenzuweisung mit doppelten Anführungszeichen passiert. Mir fehlte ein abschließender geschweifter Klammern bei einer POST-Variablen...
"für {$_POST['txtName']} on $date"
;
sollte sein
"für {$_POST['txtName']} on $date"
;
I can't explain why. I mean, I see the error that would break the code but I don't see why it references a class error.
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.
26 Stimmen
Manchmal ist dies die Art und Weise von PHP, Ihnen zu sagen, dass Ihnen ein $-Zeichen fehlt... zum Beispiel, wenn Sie _SESSION["foo"] anstelle von $_SESSION["foo"] schreiben.
0 Stimmen
Ich weiß, das ist eine alte Frage, aber die kurze Antwort ist, dass PHP eine Konstante als Klassenname (falsch) interpretiert. Einige Operationen, wie
empty
, werten Ausdrücke nicht aus, die Konstanten enthalten. Daher versuchen sie, eine Konstante als Klassenname zu interpretieren und erwarten, dass sie ein::
hat, um eine statische Eigenschaft anzugeben. Und natürlich, wenn Sie das$
bei einer Variablen vergessen, wird es als Konstante fehlinterpretiert. Vieles von diesem Wahnsinn, wenn auch nicht die Fehlermeldung, wird in späteren Versionen von PHP behoben.