Seite 1 von 2

[OK]T_PAAMAYIM_NEKUDOTAYIM Fehlermeldung?

Verfasst: 06.01.2007 19:23
von gn#36
"Unexpected ')' expecting T_PAAMAYIM_NEKUDOTAYIM in ... on line ..."
ist jemand schon mal über so eine Fehlermeldung gestolpert?

ich war jedenfalls sehr irritiert, als offenbar die Konstruktion if(!empty(SID)) genau diesen Fehler hervorrief. Macht man es dagegen so:

Code: Alles auswählen

$sid = SID;
if(!empty($sid))
funktioniert es wie es soll.
Google sagt zu diesem Fehler z.B. das hier:
http://manuals.phpforum.de/php/language ... otayim.php

=> gemeint ist ::, die Frage ist nur: Was hat das mit meinem Code zu tun?
Ist SID hinterher vielleicht doch mehr als nur eine Konstante?

Verfasst: 06.01.2007 21:34
von FCM
Ist das oben die ganze Fehlermeldung? Eher nicht, da wird ja keine Zeile angegeben und so.

Verfasst: 06.01.2007 21:48
von gn#36
Natürlich nicht, das war nur der wesentliche Inhalt. Die gesamte Fehlermeldung wäre:
Parse error: syntax error, unexpected ')', expecting T_PAAMAYIM_NEKUDOTAYIM in .../function.php on line 920
Der Fehler ist auch leicht zu beheben wie oben beschrieben. Es wundert mich nur, dass er überhaupt auftritt, denn ich dachte dass Konstanten im Prinzip Platzhalter sind die man auch durch ihre Definition ersetzen könnte (es funktioniert auch nicht mit einer anderen Konstanten). Wenn ich aber den String für den die Konstante steht einsetze in die Funktion geht's wunderbar, genauso wenn ich den Inhalt der Konstanten in eine Variable schreibe und die dann übergebe. Aber eben nicht direkt mit der Konstanten:

Code: Alles auswählen

if($append_sid  && !empty(SID))
dann gibt's - egal welche Konstante ich jetzt nehme - den oben beschriebenen Error.

Verfasst: 06.01.2007 21:50
von andreasOymann
sei nicht so geizig und poste bitte mal die 5 Zeilen vor und nach der Zeile 920 mit... :wink:

desweiteren verwundert mich die Meldung sowie die gepostete Zeile etwas: eine function.php gibt es im phpBB nicht, und der Code taucht in der originalen functions.php nicht auf...

A

Verfasst: 06.01.2007 21:58
von gn#36
Meinetwegen:
Derzeit benutze ich das Skript (testweise) so:

Code: Alles auswählen

//SESSION ID
	$sid = SID;
	if($append_sid  && !empty($sid))
	{
		if(strpos($url,'?'))
		{
			if(strpos($url,'?') != strlen($url))
			{
				//& dazu
				$url .= '&'; 
			}
			
		}
		else
		{
			$url .= '?';
		}
		$url .= SID;
	}
Das $sid = SID;
sollte aber meiner Meinung nach unnötig sein und durch den direkten Einsatz der Konstanten ersetzbar sein. Ist es aber nicht.

Nur so als Hintergrund: Das ganze wird von mir verwendet um Links mit der Session Id zu versehen falls nötig. Da die Funktion u.a. noch andere Parameter anhängt habe ich SID versucht zu behandeln wie alle anderen Parameter auch: Wenn noch keine Parameter angehängt waren, dann ? dran, wenn schon welche da sind dann & dazu, das ganze wäre aber sinnlos wenn in SID nix drin steht, daher die Abfrage if(empty(SID)) (oder jetzt auch nicht mehr).

EDIT: Das hat mit phpbb auch nichts zu tun, daher nicht über die Dateinamen wundern...

Mir ging es hauptsächlich darum zu erfahren, warum SID (und generell Konstanten) nicht mit empty() zusammen funktionieren. Schließlich kann man auch eine Konstante als Repräsentation einer leeren Zeichenkette definieren.

Verfasst: 06.01.2007 22:58
von S2B
Und noch zum Hintergrund der Fehlermeldung: http://www.pri-dev.net/de/blog_show/id1 ... ehler.html

Verfasst: 06.01.2007 23:08
von gn#36
Hm ich habe mich wohl vertan was die Funktionsweise von empty angeht:
de.php.net hat geschrieben: bool empty ( mixed var )

Prüft, ob eine Variable einen Wert enthält
Parameter Liste

var

Die zu prüfende Variable.

Anmerkung: empty() überprüft nur Variablen, alles andere führt zu einem Parse-Error. Anders gesagt wird folgendes nicht funktionieren: empty(trim($name)).

empty() ist das Gegenteil von (boolean) var, außer dass keine Warnung erzeugt wird, wenn die Variable nicht gesetzt ist.
Trotzdem eine sehr witzige Fehlermeldung...

Verfasst: 06.01.2007 23:33
von S2B
Was du suchst, ist [php:defined]. :wink:

Verfasst: 07.01.2007 01:58
von gn#36
Nein, denn das wäre das Gegenstück von isset(). Ich wollte auf Inhalt prüfen, nicht auf Definition (defined() würde auch true liefern wenn die Konstante mit einem leeren String definiert wurde, oder mit false, genau das wollte ich mit empty ausschließen.) Trotzdem danke :grin:

Verfasst: 07.01.2007 11:19
von S2B
Du könntest es mal so versuchen:

Code: Alles auswählen

function empty_const($const)
{
  return empty(constant($const));
}
Aufruf:

Code: Alles auswählen

if (empty_const('SID'))
{

}