Einzelnen Beitrag anzeigen
Alt 08.12.2004, 17:57  
Waq
Erfahrener Benutzer
 
Registriert seit: 15.08.2004
Beiträge: 2.473
Waq
Standard

Zitat:
Zitat von Ensis
bis PHP4 die Entscheidung für Objekte auch immer einen großen Performance-Verlust mit sich bringt
Dann würde ich in PHP 4 eben eine Variante umsetzen, die mit einem zusätzlichen Objekt auskommt. Das hält den Performance-Verlust doch sehr klein.

Also nehmen wir an die bisherige Klasse heisst TreeArray, dann baue ich eine Helper-Klasse TreeArrayTraverser, die eine Referenz auf eine Instanz von TreeArray bekommt und direkt (ohne Accessoren, ist schliesslich eine Schwester-Klasse) auf das Array zugreift.
In das Ding implementiert man das gleiche Interface wie vorhin beschrieben, nur mit einer zusätzlich Methode für den Weg zur Wurzel zurück, darauf zuzugreifen sähe so aus:
PHP-Code:
//rekursive preorder-Ausgabe eines Baumes
function preorder(&$tree) {
  echo 
$tree->curValue();
  while (
$tree->nextChild())
    
preorder($tree);
  
$tree->up();
}
//ein baum kommt daher
$tree = new tree();

//baum ausgeben
preorder($tree); 
Dazu bräuchte die Helper-Klasse einen Stack, aber den bräuchte sonst der Aufrufende Code. Man macht es sich so also nicht komplizierter als nötig, man verschiebt den Code nur dorthin, wo er sinnvoller ist, und sich so "nah" an den Daten befindet, dass er ohne Accessoren frauf zugreifen darf. Man macht es sich also sogar einfacher.

Mir fällt einfach kein Fall ein, wo man auf ein unbekanntes Multidimensionales Array durch einen Accessor zugreifen müsste, weswegen ich es nicht so schade finde, dass es dafür scheinbar keine einfache, performante Möglichkeit gibt.
__________________
mod = master of disaster
Waq ist offline   Mit Zitat antworten