Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » PHP » Gültigkeitsbereich von Variablen

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
28.02.2005, 09:59 Uhr
virtual
Sexiest Bit alive
(Operator)


Hallo, ich versuche mich mit PHP anzufreunden und bin kurz davor, zum Feind zu werden.
Ich habe folgenden stark verkürzten Code:

Code:
class item {
    var $node;
    
// 1
    function item($node) {              
        $this->$node = $node;
        if ($this->$node!=null) {
            echo "Node gesetzt<br>";
        }
    }
    
// 2
    function test() {                        
        if ($this->$node!=null) {
            echo "Node gesetzt<br>";
        }
    }
}


class doctree {
    var $doc;

    function doctree() {
        $this->$doc = new DOMDocument(implode('', file('doctree.xml')));
    }
    
    function get_item($item_path) {
        # Split path into components
        $path_comps = explode('/', $item_path);
        
        # Find according node
        $node = $this->$doc->document_element();
        foreach($path_comps as $comp) {
            $node = $this->find_child_item_node($node, $comp);
// 3
                $item = new item($node);
            echo $item->test();
            return $item;
        }
    }
}



Ich habe also zwei Klassen, doctree und item. Auf irgendeine Art erzeugt doctree item Objekte und gibt diesen einen Parameter mit auf den Weg. Nach meinem Verständnis ist die mit "1" kommentierte Zeile ein Konstruktor für Klasse item. Ich sehe anhand der ausgaben, daß der $node Parameter korrekt gesetzt wird.
Der Konstruktor aufruf erfolgt in der mit "3" kommentierten Zeile. Ich würde nun erwarten, daß wenn ich die Test-Methode ("2") des eben erst konstruierten Objekts aufrufe, der Node-Member noch immer gesetzt ist.

Was mache ich denn falsch, denn dem ist nicht so: das ist NULL geworden.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
28.02.2005, 12:07 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


er gibt müll aus da folgendes: (mal etwas "inline" machen)


PHP 4:
echo $item->test();



wird zu


PHP 4:
echo "";



da du keinen return-wert deiner funktion definiert hast und da der interpreter dann "return 0" annimmt.

probier mal aus wenn du das echo weglässt ob es dann funktioniert (sollte es jedenfalls)
--
class God : public ChuckNorris { };

Dieser Post wurde am 28.02.2005 um 12:08 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
28.02.2005, 13:02 Uhr
virtual
Sexiest Bit alive
(Operator)


Hi,

ich glaube, Du hast mich nicht richtig verstanden. Ich habe das Problem mal vereinfacht:

Code:
class item {
    var $data;
    function item($data) {
        $this->$data = $data;
        echo "item::item: " . $this->$data . "<br>";
    }
    function get_data() {
        echo "item::get_data: " . $this->$data . "<br>";
        return $this->data;
    }
}

class doctree {
    function doctree() {
    }
    function get_item() {
        $item = new item("DATA");
        echo "doctree::get_item: " . $item->get_data() . "<br>";
    }
}



Wenn ich nun doctree->get_item() aufrufe, würde ich nach meinen Erfahrungswerten aus C, C++, Java, Perl usw annehmen, daß die Ausgabe wäre:

Code:
item::item: DATA
item::get_data: DATA
doctree::get_item: DATA


Tatsächlich aber ist die Ausgabe:

Code:
item::item: DATA
item::get_data:
doctree::get_item:


Nur habe ich eben keine Ahnung, warum das so ist. Letztlich scheint das Item-Objekt seinen Inhalt zu vergessen. Wie macht man es denn richtig?
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
28.02.2005, 14:05 Uhr
mike
Pinguinhüpfer
(Operator)


Hallo!

Probier mal $this->data (also ohne $)

mfg
--
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
28.02.2005, 14:29 Uhr
virtual
Sexiest Bit alive
(Operator)


Besten Dank: DU hast einen kleinen C Programmierer sehr glücklich gemacht!
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
28.02.2005, 15:10 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


ah jo hab auch grade erst gesehen das du da noch ein $ drin hattest
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ PHP ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: