Änderungen von Objekteigenschaften vor dem Speichern berechnen

Moin NG,

man stelle sich folgenden Auszug eines Objekts vor, Zielplattform ist
ein LAMP mit PHP 5.2.3 und memcached 1.2.1:

class MyObject
{
// die Nutzlast
private $aProps = array();

public function __construct() {
// hole die Eigenschaften aus Cache/DB
// und schiebe sie in $aProps
}

public function __destruct() {
// berechne was sich in $aProps geändert hat
// und schiebe die Änderungen zurück in Cache/DB
}

public function set($sKey, $mValue) {
$this->aProps[$sKey] = $mValue;
}
}

Im weiteren Programmverlauf wird dann eine Instanz erstellt

$oMyObject = new MyObject();

und per $oMyObject->set(); wird mindestens ein Wert überschrieben.

Wie oben schon angedeutet soll im Destruktor (oder in __sleep() oder wo
auch immer) berechnet werden, welche Elemente von $aProps verändert
wurden, damit sie auf die eine oder andere Weise dann ihren Weg zurück
in den Cache und die DB finden können.

Mein erster Ansatz war, das komplette $aProps als Kopie in
$aOriginalProps abzulegen und später mit array_diff() (oder so) zu
arbeiten. Das habe ich dann schnell wieder verworfen, weil mir das vom
Ressourcenverbrauch her zu teuer wird.

Dann kam mir die Idee, in der Methode set() den $sKey des geänderten
Elements an eine neue Klassen-Eigenschaft $aChangedProps anzuhängen.

//...
public function set($sKey, $mValue) {
// hier könnte man noch prüfen
// ob sich $mValue tatsächlich ändert (===)
$this->aChangedProps[] = $sKey;
$this->aProps[$sKey] = $mValue;
}
//...

Das würde die Auswahl natürlich vereinfachen und ist auch nicht so teuer.

Habt Ihr vielleicht noch Anmerkungen dazu oder eine Idee wie das
eleganter zu lösen ist?

Gruß Jacob
Jacob Hayn [ Sa, 12 April 2008 13:44 ] [ ID #1941268 ]

Re: Änderungen von Objekteigenschaften vor dem Speichern berechnen

Jacob Hayn wrote:

> Dann kam mir die Idee, in der Methode set() den $sKey des geänderten
> Elements an eine neue Klassen-Eigenschaft $aChangedProps anzuhängen.
>
> //...
> public function set($sKey, $mValue) {
> // hier könnte man noch prüfen
> // ob sich $mValue tatsächlich ändert (===)
> $this->aChangedProps[] = $sKey;
> $this->aProps[$sKey] = $mValue;
> }
> //...
>
> Das würde die Auswahl natürlich vereinfachen und ist auch nicht so
> teuer.
> Habt Ihr vielleicht noch Anmerkungen dazu oder eine Idee wie das
> eleganter zu lösen ist?

So löst man das Problem meines Wissens auch in Propel[1].

Grüße
Johannes

[1] http://propel.phpdb.org/trac/

--
Emails ohne "[nospam]" im Betreff werden kommentarlos gelöscht.
Johannes Mueller [ Sa, 12 April 2008 15:02 ] [ ID #1941270 ]
PHP » de.comp.lang.php.misc » Änderungen von Objekteigenschaften vor dem Speichern berechnen

Vorheriges Thema: Maximale Begrenzung von serialize verändern?
Nächstes Thema: Root-Pfadwechsel nach Zertifikatzustimmung