Hilfe bei Problemlösung beim OOP
Geizhals » Forum » Programmierung » Hilfe bei Problemlösung beim OOP (9 Beiträge, 107 Mal gelesen) Top-100 | Fresh-100
Du bist nicht angemeldet. [ Login/Registrieren ]
.
Re: Hilfe bei Problemlösung beim OOP
15.09.2007, 03:04:34
eine möglichkeit wäre, das objekt zu klonen, anstatt neu zu instanzieren. in php 5 kannst du die klon-methode overriden, damit du dort eine frische klasse herausbekommen würdest, die nur die datenbank-daten von der ursprungsklasse übernimmt.

eine andere möglichkeit - und das ist die, die ich empfehlen würde - wär durch ein singleton pattern.

ein singleton pattern ist im grunde nix anderes als eine globale variable, nur viel viel aufwändiger und eleganter :-)

ich benutze ein singleton pattern z.b. für meine datenbankabstraktionsklasse, du könntest eines für die dateninstanz selber machen.

funktionieren tut das lt. wikipedia so:
The singleton pattern is implemented by creating a class with a method that creates a new instance of the class if one does not exist. If an instance already exists, it simply returns a reference to that object.


von einem singleton pattern hast du also immer nur 1 objekt, kannst das aber jederzeit holen. in deinem fall würde das so ausschauen

von klasse A stammen deine objekte, die mit den daten der klasse B herumfuhrwerken.
klasse B ist die singleton, welche die daten beinhaltet, und nur einmal existiert.

eine getData-methode der klasse B tut jetzt nichts anderes als nachzuschauen, ob die daten schon vorhanden sind. wenn nein, dann hol sie aus der datenbank. wenn ja, dann liefer sie zurück.

eine singleton pattern in php5 würde lt. wikipedia z.b. so aussehen:

<?php
class Singleton {
  // object instance
  private static $instance;
 
  private function __construct() {}
 
  private function __clone() {}
 
  public static function getInstance() {
    if (self::$instance === null) {
      self::$instance = new Singleton();
    }
    return self::$instance;
  }
 
  public function doAction() {
    ...
  }
}
 
//usage
Singleton::getInstance()->doAction();
 
?>


15.09.2007, 03:07 Uhr - Editiert von stefs, alte Version: hier
Antworten PM Übersicht Chronologisch Zum Vorgänger
 
Melden nicht möglich
 

Dieses Forum ist eine frei zugängliche Diskussionsplattform.
Der Betreiber übernimmt keine Verantwortung für den Inhalt der Beiträge und behält sich das Recht vor, Beiträge mit rechtswidrigem oder anstößigem Inhalt zu löschen.
Datenschutzerklärung