T-Rex: Klassen nebeneinander benutzten

Beitrag lesen

Moin,

in PHP gibt es Abstraktionen. Das sind Klassen die nicht selbst initialisiert werden können. Diese werden mit abstract gekennzeichnet.
Oder Interfaces. Das sind Baupläne nach deren muster du die Klasse implementieren musst.

Eine Klasse und später die Objekte sind nichts weiter als Hilfestellungen für deine Programme. Ein Objekt übernimmt eine gewisse Aufgabe. Was es wie macht sind durch Methoden definiert.
Das Objekt muss irgendwo initialisiert werden. Dort bestimmst du auch was genau du brauchst. Ich nenne solche Teile Controller, da sie kontrollieren was passiert. Wenn du einen Controller hast, der sich z.B. um das Speichern eines Users kümmert kann dir vielleicht die Klasse cUserVerwaltung helfen. Also wird diese initialisiert und entsprechend aufgerufen.

Mehrere Objekte können miteinander kommunizieren. Wie sowas passiert wird in einigen Softwarepatterns geregelt. Das sind paradigmen die immer wiederkehrende Probleme beschreiben und Lösungen anbieten.
Ein praktisches Beispiel. Nehmen wir an du willst den User wirklich speichern, dann könnte das Ganze so aussehen:

$arUser = array();  
$arUser["name"] = $_POST['username'];  
$arUser["geschlecht"] = $_POST['geschlecht'];  
$objUserVerwaltung = new cUserVerwaltung();  
$objUserVerwaltung->save( $arUser );  

was in save passiert ist in dem Fall nicht einsehbar. Dabei spricht man von einer Blackbox. Wenn die Save Methode funktioniert kannst du an diesem Punkt 2 Dinge erwarten. Entweder das speichern ist erfolgreich oder es gab einen fehler. Wie damit verfahren wird möchte ich nicht näher ausführen.

Innerhalb von save können aber auch andere Objekte initialisiert werden. Save könnte vielleicht so aussehen:

public function save( $arUser )  
{  
    //--- User Daten sind nicht korrekt eingegeben worden  
    if( !$this->check( $arUser ) )  
    {  
         return false;  
    }  
    $objDB = new cDatenbank();  //--- mysql Verbindung aufmachen  
    return $objDB->save("user", $arUser );  
}  

Das Ganze nennt man eine Komposition. Das Objekt $objDB existiert nur solange die Methode abläuft. Danach wird es wieder zerstört und der Speicher wird freigegeben. Bei diesem kleinen Beispiel braucht man es auch nicht länger.
Anders sieht der Fall aus wenn man von außen den Datenbank Typ definieren möchte. Wenn ich im Controller entscheiden möchte in welche Datenbank gespeichert wird. Dann sieht das Ganze so aus:

if( true )  
    $objDB = new cMySQL();  
else  
    $objDB = new cMongoDB();  
$objUserVerwaltung->save( $arUser, $objDB );  

Das ist eine Aggregation. Das Objekt wird übergeben. Es bleibt länger am leben, als die Methode save abläuft.
Das sind nur 2 Softwarepattern von gut einem Dutzend. Mit der Zeit kommst du selbst drauf, da alle Softarepattern logisch aufgebaut sind. Deshalb bringt es meiner Meinung nach nichts die Dinger auswendig zu lernen.

Hoffe ich konnte Helfen

Gruß
Klassenbester
T-Rex