PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Problem bei PHP4 Code unter PHP5


TheRealTentacle
2008-05-11, 14:54:20
Hallo, ich habe eine Funktion die unter PHP5 nicht mehr funktioniert, allerdings kenne ich auch nicht deren genaue Funktion:


function Input($name, $type, $value = "", $title = "", $regex = '^.*$')
{
if(class_exists($type))
{
$this = new $type($name,$value,$title,$regex); // Zeile der Fehlerausgabe
$this->type = $type;
return true;
}
else
{
$this->type = $type;
$this->name = $name;
$this->id = $name;
$this->value = $value;
$this->title = $title;
$this->regex = $regex;
}
}


Was macht diese Funktion? Wie kann ich sie PHP5 kompatibel machen. $name ... wurden mit var zuvor deklariert.

Der Fehler unter PHP lautet folgendermaßen:

Fatal error: Cannot re-assign $this in ... .php on line (siehe oben)

Vielen Dank im Vorraus.

Marscel
2008-05-11, 15:23:12
Wenn Input() keine Memberfunktion ist, dann würde ich alle $this durch einen anderen Variablennamen ersetzen, der wird unter PHP5 sicher bloß noch im Memberfunktions-Scope erlaubt sein.

TheRealTentacle
2008-05-11, 15:26:48
Das heist wenn ich einen switch mache, und diese manuell festlege sollte es funktionieren? Denn ich habe genau das getestet, in PHP4 läuft es soweit auch ohne $type.

Marscel
2008-05-11, 16:58:52
Das $type sollte hier nichts zur Sache tun, ein Objekt über $x = new $y(); zu erzeugen ist in PHP immer erlaubt gewesen. Es geht, wie ich es in dem Schnipsel sehe, bloß um das "$this", das man unter PHP5 nicht einfach verwenden darf, wenn du stattdessen "$foo" nimmst, wird es sicher in PHP4 + 5 funktionieren.

Switch für die PHP-Versionen? Versuchen kannst du es, aber das ist doch eigentlich unnötig.

TheRealTentacle
2008-05-11, 17:28:08
Ich habe ds Problem anders gelöst. Ich hab die Funktionen der Tochterklassen (die die Vaterklasse in diesen Fall überschreiben sollte) einfach in die Vaterklasse intergriert. Das funktioniert soweit wunderbar. Leider wäre es nicht möglich gewesen $this einfach zu ersetzten, die jetzige lösung ist nicht optimal, aber da ich nur in einer Funktion per ifelse die verschiedenen Tochterklassen (die $type darstellen) unterscheiden muss, geht es ganz gut.

Danke :).