000
04.11.2005, 18:00
thinktank
|
Hallo,
Ich habe folgendes Problem: ich will eine Template-Klasse erstellen, aber irgendwie behalten die Membervariablen nicht ihren ursprünglichen Wert. Hier erstmal die Klasse (wie man sieht, soll das PHP4 sein), eigentlich ist nur der Konstruktor wichtig:
<?php class Template { var $file; var $desc; var $caption; var $vars = array(); function setVar($var_name, $value) { $this->$vars[$var_name] = $value; } function Template($file) { if(!($this->$file = file_get_contents("../templates/" . $file))) { print("Template konnte nicht gefunden werden"); } else { $regs = array(); ereg("/\**\*(.*)\**\{(.*)\}*\*/", $this->$file, $regs);
$this->$desc = $regs[2]; $this->$caption = $regs[1]; } } function parse() { $pfile = $this->$file; while (list($var_name, $value) = each($this->$vars)) { $pfile = str_replace("{\$". $var_name ."\$}", $value, $pfile); } return $pfile; } function printHTML() { print(parse()); } function save($file) { $res = fopen($this->$file, "+w"); fwrite($res, $this->parse($file)); fclose($res); } function getDesc() { return $this->$desc; } function getCaption() { return $this->$caption; } } ?>
Und hier kommt sie zur Anwendung:
while($file = readdir($handle)) { if($file != '.' && $file != '..' && (substr($file, -4) == ".tpl")) { $template = new Template($file); print("<tr> <td colspan="2">". $template->getCaption() ."</td> </tr> <tr> <td><input type="radio" name="". $file .""></td> <td>". $template->getDesc() ."</td> </tr>"); }
}
Ich denke, es ist einsichtig, was der Code bewirken soll. Komischerweise geben getCaption() und getDesc() immer dasselbe aus. Wenn ich ein print_r($regs) im Konstruktor Template(...) mache, dann werden aber unterschiedliche Werte für $regs[1] und $regs[2] geliefert. Der RegEx ist noch nicht final, aber das ist ja nicht das Problem.
Danke!
thinktank
--
Dieser Beitrag wurde am 04.11.2005 um 22:34 von thinktank bearbeitet.
|
|
Profil || Suche
|
001
04.11.2005, 22:34
thinktank
|
Es ist noch ein weiteres Problem hinzugekommen:
Egal in welcher Member-Funktion gibt gettype($this->$vars) "string" zurück, auch wenn ich die Variable bis auf die Initialisierung nicht ändere, so nimmt z.B. das each() $this->$vars nicht an.
--
|
|
Profil || Suche
|
002
04.11.2005, 23:52
Zpin
|
greif mal per $this->vars auf die membervariablen zu... (weiss nicht wie du auf $this->$vars kommst)
--
|
|
Profil || Suche
|
003
05.11.2005, 00:14
thinktank
|
Das wird der Fehler sein, danke. Ist das erste Mal, dass ich OOP in PHP mache und es erschien mir logisch ... komischerweise hat er keinen Fehler ausgegeben.
--
|
|
Profil || Suche
|
004
05.11.2005, 00:29
KhanRKerensky
|
komischerweise hat er keinen Fehler ausgegeben. Das liegt daran das $this->$vars ein korrekter Ausdruck ist. Funktioniert wie eine variable Variable. http://de3.php.net/manual/en/language.variables.variable.php
--
"[...] you're going to burn in a very special level of Hell. A level they reserve for child molesters and people who talk at the theater." - Book
Dieser Beitrag wurde am 05.11.2005 um 00:29 von KhanRKerensky bearbeitet.
|
|
Profil || Suche
|
005
25.11.2005, 15:25
Chronial
|
http://de3.php.net/manual/de/language.oop.php
Deshalb benennen die Namen $cart->items und $another_cart->items auch zwei verschiedene Variablen. Beachten Sie, dass die Variable $cart->items, und nicht $cart->$items genannt wird, da ein Variablenname in PHP nur ein einziges Dollarzeichen hat.
// korrekt, einfaches $ $cart->items = array("10" => 1);
// falsch, denn $cart->$items wird zu $cart->"" $cart->$items = array("10" => 1);
// richtig aber fraglich, ob dies erwünscht war: // $cart->$myvar wird zu $cart->items $myvar = 'items'; $cart->$myvar = array("10" => 1);
--
"tsuji-giri" (japanisch) - ein neues Schwert an einem Passanten ausprobieren
|
|
Profil || Suche
|