Objekte einer Klasse per eval() ansprechen?

Antispy

Mitglied
Hallo Zusammen,

ich versuche mich gerade einmal an der objektorientierten Programmierung, aber bin nun an einen Punkt angekommen, wo ich nicht genau weiß, wo ich genau den Fehler suchen muss.

und zwar habe ich eine Klasse "template" erstellt mit 2 Methoden "string_lang" und "convert_content". In der Methode "convert_content" werden nur mittels eval() php variablen in einer template-datei ausgetauscht und in der Methode "string_lang" wird ein text zurückgegeben. Die Methode gibt dieses Wort nur in einer bestimmen Sprache wieder (DE, ENG, FR..) um die Klasse mehrsprachig zu machen ;)

Nun würde ich gerne diese Methode "string_lang" direkt im template aufrufen.
Das würde dann bspw. so aussehen:

HTML:
	<tr>
		<th>$this->string_lang('username')</th>
		<th>Email</th>
		<th>Gruppen</th>
		<th>Action</th>
	</tr>

Beide Methoden sind als public definiert und ich dachte, dass ich deswegen so ganz einfach auch im eval auf die Methode und das Objekt zugreifen kann.
Leider jedoch erhalte ich so immer nur folgende Fehlermeldung:

Notice: Undefined property: template::$string_lang in C:\xampp\file.php(23) : eval()'d code on line 3

Habt Ihr dort eine Idee, woran dieses liegen könnte?

Vielen lieben Dank für die Hilfe!!

Gruß,
Antispy
 
[phpf]eval[/phpf] stellt sozusagen eine eigene PHP Instanz dar und kennt keine Variablen oder Objekte der normalen "Instanz", weshalb es das Objekt nicht kennt.
 
Hallo Felix,

danke für die fixe Antwort!
Gibt es dort denn eine Möglichkeit die Instanzen irgendwie miteinander zu "vermischen"?
Das würde eine ganze Menge Variablen-Zuweisungen sparen *g*

Danke nochmal!

Gruß,
Matthias
 
Du könntest dir für die Sprache ein Tag ausdenken. Sowas wie _{String}. Dann kannst du mit preg_replace alle diese Tags durch ihre Übersetzungen ersetzen, nach dem oder bevor du das convert_content() durch geführt hast, oder es wird ein Teil innerhalb von convert_content().
 
Ansonsten könnte man das Objekt serialisieren und das im Code dann wieder deserialisieren.
 
Zurück