653 Stimmen

PHP erwartet T_PAAMAYIM_NEKUDOTAYIM?

Hat jemand ein T_PAAMAYIM_NEKUDOTAYIM?

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.

14voto

Harman Punkte 539

Das passiert auch, wenn Sie in PHP eine Konstante auf die empty() Funktion anwenden:

if (!empty(SOME_CONSTANT)) {

}

Das war mein Fall. Ich habe es gelöst, indem ich dies verwendet habe:

$string = SOME_CONSTANT;
if (!empty($string)) {

}

2 Stimmen

Warum wäre eine Konstante leer?

1 Stimmen

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 :)

7 Stimmen

@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.

7voto

MAChitgarha Punkte 2673

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.

3voto

GDY Punkte 2625

Dies kann bei foreach-Schleifen passieren, wenn man Folgendes verwendet:

foreach( $array as $key = $value )

anstelle von

foreach( $array as $key => $value )

0 Stimmen

Dies geschieht nur in PHP 7.0 und ist ab PHP 8.0 nicht mehr der Fall: 3v4l.org/HScA4

2voto

bozdoz Punkte 11750

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.

1voto

Mark Cicchetti Punkte 1

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.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