phpbar.de logo

Mailinglisten-Archive

[php] besonderes entwurfmuster gesucht

[php] besonderes entwurfmuster gesucht

Timo Schmidt php at xomit.de
Mit Sep 15 03:17:32 CEST 2004


On Tue 14 Sep 2004 23:21 +0200, Johannes Schäfer wrote:
> Timo Schmidt aeusserte  am 14.09.2004 23:02 folgendes:
>
> > On Tue 14 Sep 2004 22:56 +0200, Johannes Schäfer wrote:
> >
> > > ich suche ein entwurfsmuster welches immer nur eine
> > > instanz von einem objekt mit bestimmten eigenschaften
> > > liefert.
> >
> > Singleton Pattern.
> 
> singleton macht mir doch nur eine instanz von einer klasse?

Das liefert Dir doch ein Objekt der Klasse, welches mit
dem Operator »new« über eine Variable angesprochen werden
kann. Mit dem Singleton Muster hast Du die Möglichkeit
anhand Deiner Kriterien genau ein Objekt dieser Klasse
zu erhalten. Wenn Dir eine statische Klasse ausreicht,
dann erzeuge kein Objekt dieser Klasse, sondern nutze die
Funktionen der Klasse direkt mit dem »::« Operator.


> > > also die bestimmende eigenschaft ist in diesem fall die
> > > $id.
> >
> > Vorschlag: Serialisiere die übergebenen Paramter, bilde
> > einen MD5-Hash und speichere das erzeugte Ojekt unter
> > diesem Hash, z.B. in einem Array mit entsprechenden
> > Index. Sollten nun die selben Paramter übergeben werden,
> > kannst Du mit dem Hash-Wert überprüfen, ob es schon ein
> > Objekt zu diesen Werten gibt.
>
> ja, das war auch schon meine idee. ich hoffe halt nur das
> es vielleicht eine bessere gibt.

Anhand welcher Kriterien Du die Parameter und damit die
Objekte am besten unterscheiden kannst, musst Du schon selber
wissen. Wenn es lediglich $id sein soll, dann mach doch
einfach folgendes:

class foobar
{
	private $_inst = array();

	public function get_instance($id, $classname)
	{
		if (isset($this->_inst[$id]) && is_object($this->_inst[$id]))
			return $this->_inst[$id];

		$this->_inst[$id] = new $classname($id);
		return $this->_inst[$id];
	}
}

$singl = new foobar();
$obj   = $singl->get_instance(10, "was_auch_immer");


  -Timo

php::bar PHP Wiki   -   Listenarchive