Hallo zusammen
Ich programmiere derzeit eine Baum-Datenstruktur in PHP 4. Unter Java habe ich sowas schon unzählige Male gemacht, aber unter PHP stolpere ich über die Geschichte mit den Referenzen, und wäre deshalb ein wenig Hilfestellung sehr dankbar.
Ok, worum geht's? Ich habe eine Klasse Baum. Jede Instanz hat einen Wert, also eine Beschriftung, und eine Menge von Kindern, die ebenfalls Instanzen der Klasse Baum sind. Schema F aus der Informatik halt.
Ich habe neben dem Konstruktor, der einen Baumknoten anlegt und die Beschriftung festlegt, noch eine Methode zum hinzufügen von Kindern, und eine zum rekursiven anzeigen eines Knotens und seiner Kinder.
PHP:
<?php
class Baum {
var $wert; //Beschriftung des Knotens
var $kinder; //Array mit Kindern
//Konstruktor
function baum($wert) {
$this->wert = $wert;
$this->kinder = array();
}
//Kind hinzufügen
function addKind(&$kind) {
$kinder[] =& $kind;
}
//Knoten eingerückt anzeigen, Kinder rekursiv anzeigen
function zeige($einrueck = 0) {
for ($i = 0; $i < $einrueck; $i++)
echo '-';
echo $this->wert.'<br />';
foreach($kinder as $kind)
$kind->zeige($einrueck + 2);
}
}
//Beispieldaten
$a =& new Baum('a');
$b =& new Baum('b');
$c =& new Baum('c');
$d =& new Baum('d');
$e =& new Baum('e');
$a->addKind(&$b);
$a->addKind(&$c);
$b->addKind(&$d);
$b->addKind(&$e);
$a->zeige();
echo '<pre>';
print_r($a);
echo '</pre>';
?>
Problem: Das Array $kinder will einfach nicht die Verweise auf die Kinder korrekt abspeichern, wie die Ausgabe zeigt:
Code:
a
baum Object
(
[wert] => a
[kinder] => Array
(
)
)
Es wird nur der erste Knoten (die Wurzel) angezeigt. Und print_r zeigt, dass das Kinder-Array dieses Knotens auch leer ist. Irgendwie verzweifle ich an der Geschichte mit den Referenzen.
Die korrekte Ausgabe müsste so sein:
Hat jemand eine Idee, wie obiger Code verändert werden müsste, damit er korrekt funktioniert. Ich jedenfalls bin mit meinem Latein am Ende.