Einzelnen Beitrag anzeigen
  #1  
Alt 08.01.2011, 17:30:57
elkmod elkmod ist offline
Anfänger
 
Registriert seit: Mar 2009
Alter: 29
Beiträge: 45
OOP Zugriff auf Objekte fremder Klassen

Hallo zusammen.

Ich bin gerade dabei ein Framework zu schreiben, jedoch habe ich ein kleines Problem bei der objektorientierten Umsetzung des Ganzen.

Ich versuche mal kurz das Problem zu umreißen:
Es gibt eine Klasse BaseObject, von der alle anderen Klassen bis auf die Logs abgeleitet werden. Das BaseObject verfügt über einen Konstruktor, in dem die Log-Datei geöffnet wird, natürlich alles objektorientiert
PHP-Code:
$this->error_log = new Log("logs/error.log"); 
Das Ganze soll dazu dienen, dass später aus jedem anderen Objekt durch den Aufruf von
PHP-Code:
$this->error_log->add(Fehlermeldung); 
auf das Log-Objekt zugegriffen werden kann. Dazu ist es nützlich ein Zentrales Log-Objekt zu erzeugen, statt bei jeder Instanziierung ein neues. Beim recherchieren bin ich dabei auf die Singleton-Variante gestoßen, bei der das Objekt, soweit ich verstanden habe, nur einmal erzeugt wird und dann immer über obj->getInstance() darauf zugegriffen wird.

Die Klassen sind wie folgt aufgebaut:

Code:
BaseObject
  Config
  Controller
  Page

Log
  ErrorLog
  UserLog

Client
Wenn nun im Konstruktor von BaseObject ein Objekt der Klasse ErrorLog instanziiert wird, wie kann ich dann in Unterklassen von BaseObject auf das gleiche Objekt zugreifen ohne ein Neues erzeugen zu müssen?

Hier noch der Konstruktor von BaseObject
PHP-Code:
public function __construct()
{

  
$this->client = new Client();
  
$this->error_log LogFile::getInstance("logs/error.log");


Der Parameter bei getInstance ist da, weil das Objekt ja mindestens einmal erzeugt werden muss. Meine Frage ist jetzt, wie genau diese Funktion getInstance($path) aussehen muss, damit erst geprüft wird, ob bereits ein Objekt der Klasse existiert und dieses ggf. zurückgegeben oder erzeugt wird.
__________________
MfG Dominic

Geändert von elkmod (08.01.2011 um 17:36:13 Uhr) Grund: Rechtschreibfehler
Mit Zitat antworten