Hallo,
ich habe folgendes Problem und möchte es relativ elegant lösen, die Frage ist wie man das am besten macht:
Problem:
Die Objekte repräsentieren, vereinfacht, eine Zeile in einer Datenbanktabelle und um die Konsistenz zu wahren sollte es in einem laufenden Script nur einmal erstellt werden.
Um das Problem zu lösen dachte ich an eine statische Funktion in der Klasse übergeordneten Klasse ("dbobject") von "MeineKlasse", die die Objekt-Instanzen beim erstellen in einem Array verwaltet.
Nicht funktional, ähnlich wie nach dem Singelton Pattern:
Ist das der beste Weg oder bietet PHP dafür andere Hilfsmittel?
Um das Problem weiter zu verkomplizieren, eine variable Anzahl von Übergabeparametern bei den abgeleiteten Klassen wäre denkbar. Das wäre mit eigenen statischen "getInstance" Funktionen der abgeleiteten Klassen machbar, eine flexible Lösung der übergeordneten Klasse wäre aber bequemer.
Ein weiteres Problem ist denke, dass Objekte nie während das Script läuft entladen werden, da sie ja in dem statischen Array referenziert werden, das könnte in Bezug auf Speicher ein Problem sein.
Ich hoffe, ich habe das Problem gut genug erklärt und könnt mir evtl. helfen.
Dank euch
lg
ich habe folgendes Problem und möchte es relativ elegant lösen, die Frage ist wie man das am besten macht:
Problem:
PHP-Code:
//Objekt erstellen
$meinObjekt1 = new MeineKlasse('arg1', 'arg2', 'arg3');
/*
Irgendwo an einer anderen Stelle im Script wird das Objekt erneut benötigt
und über eine Loader-Funktion automatisch via "new" erstellt, ich möchte
aber eigentlich eine Referenz auf das zuvor erstellte Objekt "$meinObjekt1",
da es mit den gleichen Übergabeparametern erstellt wurde.
*/
$meinObjekt2 = new MeineKlasse('arg1', 'arg2', 'arg3');
Um das Problem zu lösen dachte ich an eine statische Funktion in der Klasse übergeordneten Klasse ("dbobject") von "MeineKlasse", die die Objekt-Instanzen beim erstellen in einem Array verwaltet.
Nicht funktional, ähnlich wie nach dem Singelton Pattern:
PHP-Code:
class dbobject {
protected static $_instance_manager = array();
protected static function getInstance($arg1, $arg2, $arg3) {
$class_name = get_called_class();
$key = static::getInstanceKey();
if(!array_key_exists($key, static::$_instance_manager)) {
static::$_instance_manager[$key] = new $class_name($arg1, $arg2, $arg3);
}
return static::$_instance_manager[$key];
}
//Vereinfacht
protected static function getInstanceKey($arg1, $arg2, $arg3) {
$key = $arg1 . $arg2 . $arg3;
retrun md5($key);
}
}
class MeineKlasse extends dbobject {
public function __construct($arg1, $arg2, $arg3) {
//mach was
}
}
//In beiden Variablen soll eine Referenz auf das gleiche Objekt sein
$meinObjekt1 = MeineKlasse::getInstance('arg1', 'arg2', 'arg3');
//
$meinObjekt2 = MeineKlasse::getInstance('arg1', 'arg2', 'arg3');
Ist das der beste Weg oder bietet PHP dafür andere Hilfsmittel?
Um das Problem weiter zu verkomplizieren, eine variable Anzahl von Übergabeparametern bei den abgeleiteten Klassen wäre denkbar. Das wäre mit eigenen statischen "getInstance" Funktionen der abgeleiteten Klassen machbar, eine flexible Lösung der übergeordneten Klasse wäre aber bequemer.
Ein weiteres Problem ist denke, dass Objekte nie während das Script läuft entladen werden, da sie ja in dem statischen Array referenziert werden, das könnte in Bezug auf Speicher ein Problem sein.
Ich hoffe, ich habe das Problem gut genug erklärt und könnt mir evtl. helfen.
Dank euch
lg
Kommentar