verkettete liste

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • verkettete liste

    erstmal hallo zusammen. ist mein erster post hier.
    zu meinem problem. ich arbeite gerade an einem script, das aus einer mehrfach verketteten liste besteht. hier das script:

    <?php


    class Story {

    var $id;
    var $parent_id;

    var $children;

    var $author_name;
    var $story;
    var $timestamp;
    var $title;

    function Story($id, $parent_id) {

    $this->id = $id;
    $this->parent_id = $parent_id;

    $this->children = array();

    $this->author_name = "name".$id;
    $this->story = "story".$id;
    $this->timestamp = "ts".$id;
    $this->title = "title".$id;
    }

    function addChild($story) {
    if ($story->parent_id == $this->id) {
    array_push($this->children, $story);
    } else {
    foreach ($this->children as $child) {
    $child->addChild($story);
    }
    }
    }
    }


    $root = new Story(0, NULL);

    $story1 = new Story(1, 0);
    $root->addChild($story1);
    $story2 = new Story(2, 0);
    $root->addChild($story2);
    $story3 = new Story(3, 0);
    $root->addChild($story3);
    $story4 = new Story(4, 3);
    $root->addChild($story4);

    print_r($root);

    ?>

    $root ist die wurzel des Baumes des Baumes. Über addChild füge ich jeweils einen Kindknoten hinzu. Er wird dann anhand von $parent_id in des Baum einsortiert. $parent_id ist die id des Vaterknotens.
    zu hause auf meinem testserver (php 5) arbeitet alles so wie erwartet. nur wenn ich das script auf einen anderen server (php 4) lade, wird $story4 nirgendwo einsortiert. (in diesem beispiel ist das der einzige knoten, der nicht direkt unter der wurzel hängt)
    hat hier vielleicht jemand eine idee, woran das liegen könnte? ich weiß echt nicht mehr weiter.

    schöne grüße,
    Thomas

  • #2
    Hallo Thomas,

    schalte mal das Error-Reporting ein - möglicherweise liegt das "Problem" in unterschiedlichen Konfigurationen der beiden Server. Durch sauberen Code lassen sich solche Problem auch lösen (z.B. $_GET['name_der_variable'] statt $name_der_variable oder addslashes oder...)

    Kommentar


    • #3
      Tja, so wird das auch nicht gehen. Da Du einen rekursiven Aufruf evrwendest, wird durch
      PHP-Code:
      foreach ($this->children as $child
      $child immer als neues Objekt (Variable) Instanziiert. Also wird das neue $story nur dieser Variablen innerhalb der Rekursion zugeordnet, aber nicht den children von $root. Das funktioneirt nur, wenn Du das ganze von unten nach oben aufbaust. ALso erst story3 story4 als children zuordnest und dann story3 root als children zuordnest. Es kann sein, das php5 dort mitlerweile ein anderes variablenmanagement verwendet. Also das Objekt nicht neu instanziiert, sondern die variable $child nur noch eine Referenz darstellt, dann geht das natürlich so, wie Du Programmiert hast. Wäre dann Java-Äquivalent.

      Kommentar


      • #4
        hi,
        besten dank, das war die lösung. als java-programmierer denkt man nicht an sowas wie referenzen :-)

        Kommentar


        • #5
          nächstes Mal PHP-Tags nutzen!

          Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

          bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
          Wie man Fragen richtig stellt

          Kommentar

          Lädt...
          X