Sven Rautenberg: Bitte, wer hat hier viel Erfahrung mit OOP?

Beitrag lesen

Moin!

Ich habe im php forum gepostet und dort ist anscheinend hiemand in der Lage meine Frage zu verstehen.
[url: http://www.php-resource.de/forum/showthread.php?s=&threadid=29822]

Damit die Lösungen _hier_ auch das Problem kennen, arbeite ich also hinter dir her und zitiere erstmal dein Problem (bedenke: Man soll es den Helfern so einfach wie möglich machen. Niemand geht gerne auf unverlinkte URLs - und wenn sie, so wie bei mir der Fall, den Browser erstmal reproduzierbar zum Absturz bringen, ist das böse.)

---Schnipp---
Es gibt angenommen 4 Klassen

class UserAdmin
{
UserAdmin(){}
function1(){}
function2(){// Bestimmt die ausgewählte Sprache des Cookie oder aus URL,etc}
function3(){}
}

class Company
{
Company(){}
function1(){}
function2(){}
function3(){}
}

class Datenbank // sämtliche DB Funktionen
{
Datenbank(){}
function1(){}
function2(){}
function3(){}
}

class Mitarbeiter
{
Mitarbeiter(){}
function1(){} // benötigt Sprache aus Objekt userAdmin
function2(){}
function3(){}
}

Wie kann nun dem Objekt Mitarbeiter, welches die Datenbankfunktionen der Klasse "Datenbank" und die Sprache des Objektes "UserAdmin" benötigt diese mitteilen.

Bisher habe ich in den Funktionen der Klasse Mitarbeiter immer stehen stehen:
$global $db;

$db->select("*", "mitarbeiter" .....);

Geht das nicht einfacher? Ich möchte, dass die jede Funktion der Klasse Mitarbeiter,weiß welche Sprache ausgewählt wurde. Ausserdem ist es so wie es momentan bei mir ist nicht gerade das Paradebeispiel für wiederverwendbare Software.
---schnapp---

Die Frage ist: Warum hast du die Klassen so gewählt, wie du sie gewählt hast?

Dass du mit Vererbung eine Menge erreichen kannst, ist klar. Leider kann eine Klasse nur die Eigenschaften einer übergeordneten Klasse erben, nicht aber zwei existierende Klassen zusammenführen zu einer neuen Klasse.

Daraus folgt: Die Gestaltung der Klassen muß sich gerade bei PHP primär an den Möglichkeiten der Sprache orientieren.

Wenn ich mir die Klassenbezeichnungen so ansehe: "Mitarbeiter, "UserAdmin", "Company", "Datenbank" - dann sehe ich erstmal keinerlei Zusammenhänge. Was machen diese Objekte? Wie sind sie miteinander verknüpft? Hast du die Möglichkeit in Betracht gezogen, beispielsweise zur Realisierung der Datenbankanbindung die DB-Instanz als Referenz an beispielsweise die Mitarbeiter-Instanz zu übergeben? Oder läßt sich die DB-Klasse an UserAdmin und Mitarbeiter (die offenbar beide DB-Zugang brauchen) vererben? Dann hättest du aber je Instanz einer dieser Klassen einen offenen DB-Kanal, was ja auch Verschwendung ist.

Mir sind noch zu wenig Informationen bekannt, um das Problem umfangreicher zu beantworten.

- Sven Rautenberg

--
"Beim Stuff für's Web gibts kein Material, was sonst das Zeugs ist, aus dem die Sachen sind."
(fastix®, 13. Oktober 2003, 02:26 Uhr -> </archiv/2003/10/60137/#m338340>)