PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Klasse erstellen mit Klassentyp als Variable


linuxfanatiker
13.09.2004, 22:10:51
Leute, Hilfe!

Ich möchte Klassen erstellen mit dem Klassentyp als Variablen:

$neue_klasse = new $klassen_typ;

wobei der Inhalt von $klassen_typ einer definierten und gültigen Klasse entspricht.
Das funktioniert nur mit einigen PHP-Versionen. Nicht aber mit 4.1.2, wo es denn schließlich drauf laufen soll.
Ich habe schon probiert, das mit eval() zu lösen, falle aber immer auf die Nase damit.
Weiss jemand, an welcher Environment-Variable das evtl. liegt, oder nen Tipp, wie ich das sonst bewerkstelligen kann?

mfg
der Jan

xabbuh
13.09.2004, 22:38:01
Hat $klassen_typ überhaupt den richtigen Wert?

linuxfanatiker
13.09.2004, 22:45:07
der Wert ist ein String mit dem Namen der mit

class xyz
{
blablabla
}

definierten Klasse. Also $klassen_typ=="xyz".
DAs funktioniert komischerweise nur mit der angesprochenen von insgesamt vier verschiedenen PHP-Versionen NICHT.

xabbuh
13.09.2004, 22:54:53
Es geht mir nur darum, ob $klassen_typ in der angesprochenen Version vielleicht leer ist. Das könnte zum Beispiel dann passieren, wenn du die Variable mit $klassen_typ = $_GET['klassen_typ'] ermittelst, da die Superglobalen erst ab Version 4.2 (?) zur Verfügung stehen.

linuxfanatiker
13.09.2004, 23:22:23
jetzt weiß ich, was Du meinst, und ja, ich hole mir das aus einer globalen Variablen, aber ich greife nicht auf die superglobalen zu.

Der Wert, der nachher $klassen_typ zugewiesen wird, wird woanders im Skript global erstellt.


function aaa()
{
global $klassen_typ;

$klassen_name="mitarbeiter";
.....
}

function bbb()
{
global $klassen_typ;

$klasse= new $klassen_typ;
}

Eine Übergabe per Parameter kommt ungern in Frage, und es sollte ja auch genau SO mit der Übergabe OK sein.

Wie ich es sehe, meckert der Interpreter schon beim ersten Einlesen der Funktionen über diese Stelle, fast wie ein Syntax-Fehler (aber das klingt für mich wie Blödsinn... ), aber:

Fatal error: Cannot instantiate non-existent class: in /home/sites/site88/users/dergnom/web/php_module_editor/editor.php on line 63

xabbuh
13.09.2004, 23:32:24
Original geschrieben von linuxfanatiker
Fatal error: Cannot instantiate non-existent class: in /home/sites/site88/users/dergnom/web/php_module_editor/editor.php on line 63

Der Fehler bedeutet ja einfach nur, dass die Klasse, auf die du versuchst eine Instanz zu setzen nicht existiert. Du hast auch nicht möglicherweise vergessen, diese einzubinden?

linuxfanatiker
16.09.2004, 14:40:14
Letztendlich hattest Du recht. Die $klassen_typ war leer. Das war mir nicht sofort offensichtlich. Ich steuere Programmabläufe mit einer Argumentübergabe über die Url, aber bislang ohne Wert, also www.xyz.de?wert statt www.xyz.de?wert=1.

Das erste funktioniert mit DEM Server nicht, auf allen anderen schon, wert gilt bei Ihm als nicht deklariert... Sobald ich einen Wert zuweise, klappts.

vielen Dank.

meikel
22.09.2004, 16:30:34
Original geschrieben von linuxfanatiker
Das funktioniert nur mit einigen PHP-Versionen. Nicht aber mit 4.1.2, wo es denn schließlich drauf laufen soll.
Fein, daß Du die Fehlerquelle schon erkannt hast. Die PHP-Version 4.1.x will keiner geschenkt haben (Fehler im Sessionmanagement).
Ich steuere Programmabläufe mit einer Argumentübergabe über die Url, aber bislang ohne Wert, also www.xyz.de?wert statt www.xyz.de?wert=1.

Das erste funktioniert mit DEM Server nicht, auf allen anderen schon, wert gilt bei Ihm als nicht deklariert... Sobald ich einen Wert zuweise, klappts.
Ja klar. "hostname?varname=wert"
Dann steht in $_GET['varname'] der Wert drin...