Peter Thomassen: Pass-by-Reference vs. Bequemlichkeit

Hallo Forum,

immer noch in PHP an meinem Kundenverwatungs- und Rechnungssystem bastelnd stellt sich mir gerade die Frage, ob ich ressourcenbedacht oder bequem schreiben soll:

Ich habe eine Funktion, in der zwei Datenbankabfragen durchgeführt werden. Das Resultset der ersten wird als Array in $data gespeichert, und by reference einer anderen Variablen, nämlich $this->data zugeordnet.

Anschließend wird $data für die zweite Abfrage neu definiert - das hat zur Folge, dass $this->data sich dabei ebenfalls ändert (Referenzen eben).

Um das zu verhindern, muss ich entweder

  • nach der Verwendung von $data für die erste Abfrage unset($data) durchführen oder
  • keine Referenzen verwenden.

Ersteres kann durch Vergesslichkeit zu Nichte gemacht werden; letzteres ist vor allem bei größeren Datenmengen langsamer (das können schon mal ein paar hundert KB sein, vielleicht später auch mehr).

Ich denke mal, die kleine Verzögerung würde man ohnehin nicht bemerken - oder doch? Wahrscheinlich hat das Fragen und Lesen der (hoffentlich bald existierenden :-)) Antworten schon mehr Zeit in Anspruch genommen, aber egal ...

Was meint ihr?

Danke!
Peter

  1. Hello,

    grundsätzlich sollte man allokierte Ressourcen immer gleich dann wieder freigeben, wenn man sie nicht mehr benötigt. Insbesondere beim Arbeiten mit Referenzen sollte man den Zeiger auf den Datenbereich nicht einfach durch Überschreiben vernichten. Das könnte zu verlorenen Speicherblöcken / Handles führen, die dann erst recht Den Speicher belasten und auch zu Fehlern führen könnten. Um dazu eine Aussage machen zu können, müsste man sich die Allokationsstrategien in PHP aber im Detail ansehen.

    Ich weiß aber, dass z.B. ein mysql_free_result() zur passenden Zeit durchaus die Geschwindigkeit des Gesamtsystems steigern kann.

    Liebe Grüße aus http://www.braunschweig.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen