Dienstag, 17. Juli 2007

PHP HACKS: Verkettete Listen

Aus aktuellen Anlaß: PHP ist ein Krampf, aber manchmal muß man durch. Wie bastelt man sich mit dieser Sprache ohne Zeiger verkettete Listen? Geht Nicht - gibt es nicht!

Aus unerfindlichen Gründen mußte ich mich heute mit PHP und verketteten Listen rumschlagen. Ohne Zeiger und einem Witz von Referenzen war mir das erstmal gar nicht klar, wie ich das zusammengebastelt bekomme. Ich wollte die Geschichte schon mit einem Array faken, nach ein bisschen blättern zu Referenzen in den PHP Online Dokumentationen, hab ich aber doch noch eine recht simple Methode gefunden. Zum Nachvollziehen habe ich hier nur in eine einfachen Version hineingetippt. Es geht vor allem um die Methode die PHP Referenz zu benutzen. Eine PHP Referenz schaft eigentlich mehr einen zweiten Namen eines Objektes denn eine wirkliche Referenz:



class ListItem {
var $next;
var $data;

function ListItem($_data = NULL) {
$this->next=NULL;
$this->data=$_data;
}

}

class Liste {
var $head=NULL;

function Liste() {}

function addItem($_item) {
$item = new ListItem($_item);
$tmp=&$this->head;
while($tmp) {
$tmp=&$tmp->next;
}
$tmp=$item;
}

function getListe() {
$tmp=&$this->head;
while($tmp) {
echo $tmp->data;
$tmp=&$tmp->next;
}
}
}

Falls man die Methodik durchschaut hat, sind weitere Feature wie eine Referenz auf das Listenende recht einfach zu handhaben.

2 Kommentare:

Anonym hat gesagt…

kannst du dein komplettes Skript bzw. Klasse anhängen? wär echt nett ,thx

Anonym hat gesagt…

Guter Ansatz! Jedoch kann man in dieser Liste überhaupt nicht umhernavigieren, einfach zum nächsten, ... Was vieleicht noch gut währe wenn du eine Variable Pointer einbauen würdest, welche immer auf das aktuelle Element zeigt. so kann man einfach Funktionen wie moveToNext() realisieren. gruss