Willkommen ~Gast!
Registrieren || Einloggen || Hilfe/FAQ || Staff
Probleme mit der Registrierung im Forum? Melde dich unter registerEin Bild.
Autor Beitrag
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:

Quellcode:<?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:

Quellcode: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.
zum Seitenanfang zum Seitenende 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.

--

zum Seitenanfang zum Seitenende 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)

--

zum Seitenanfang zum Seitenende 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.

--

zum Seitenanfang zum Seitenende Profil || Suche
004
05.11.2005, 00:29
KhanRKerensky



Zitat:
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.
zum Seitenanfang zum Seitenende Profil || Suche
005
25.11.2005, 15:25
Chronial



http://de3.php.net/manual/de/language.oop.php

Zitat:
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

zum Seitenanfang zum Seitenende Profil || Suche