dedlfix: Statische Methode einer abstrakten Klasse aufrufen

Beitrag lesen

echo $begrüßung;

Benutzt du den Konstruktor zum Erstellen (d.h. physischen Speichern in der DB) eines Account-Objekts?
Ich benutz den nur um mir das Objekt aus den DB-Daten zu generieren....Ka, hat mir mal einer so gezeigt und macht find ich Sinn.
Erstellen (sprich: in der DB speichern) tu ich ein Account Objekt mit der statischen Methode createAccount($name, $email, $fax, ...);

Warum erstellst du nicht ein Account-Objekt zunächst unabhängig von der Herkunft seiner Daten über den Konstruktor? Du kannst dann eine nicht-statische Methode aufrufen um die Werte zu testen.

Ein Vorschlag wäre, dem Konstruktor die Daten als Parameter zu übergeben. Erstellst du einen Account zu Fuß, übergibst du die Werte direkt. Für den Fall der Herkunft aus der Datenbank könntest du eine statische Methode verwenden, die nach dem Lesen der Ergebnismenge ein Objekt mittels der an den Konstruktor übergebenen Daten erstellt.

Oder du leitest eine spezialisierte Klasse von der allgemeinen Account-Klasse ab, deren Konstruktor die Daten aus der DB holt und dann dem geerbten Construktor übergibt.

Noch eine weitere Möglichkeit wäre wie folgt:
In anderen Sprachen kann man mehrere Konstruktoren erstellen, wenn sich die Signaturen eindeutig voneinander unterscheiden. Vom Prinzip her so:

__construct(string $name, string $password, string $email)
  __construct(int $id)

Der erste erstellt ein Objekt aus den übergebenen Daten, der zweite eins aus einem Datensatz. Für PHP kann man das so nicht implementieren.

__construct($name, $password = null, $email = null)

Aber man kann auswerten, ob diesem Konstruktor nur ein Parameter übergeben wurden, und dann den Wert in $name als ID ansehen, um damit den Datensatz aus der DB zu holen. Leider sieht das etwas unsauber aus, aber anders geht es in PHP nicht. Hier kommt es auf eine gute Dokumentation der beiden Aufrufvarianten an.

Was auch immer du machst, versuch es so wenig kompliziert wie nötig zu gestalten.

echo "$verabschiedung $name";