Frage zu PHP. Mehrere Konstruktoren für eine Klasse?

4 Antworten

Mal abgesehen von der Konstruktorproblematik, die ja wohl hinreichend beantwortet wurde...

Es ist generell kein guter Ansatz, ein Objekt zur erzeugen und im Konstruktor dessen Inhalte aus der Datenbank (oder woher auch immer) zu lesen (ich vermute diesen Sinn hinter der Frage).

Hier wäre eine Factory angebracht, deren Methoden z.B.

createFromDatabaseById

createFromDatabaseByName

createFromDatabaseByEMail

lauten.

Hier wäre nämlich die Möglichkeit gegeben, dass die Methode eben kein Objekt zurückgibt, wenn z.B. die ID in der Datenbank gar nicht vorhanden ist.

Funktionsüberladung in PHP funktioniert etwas anders, als bei anderen objektorientierten Sprachen. Siehe dazu hier:

https://softwareengineering.stackexchange.com/questions/165467/why-php-doesnt-support-function-overloading

Bei gleichem Datentyp wird es allerdings schwierig, zu unterscheiden. Daher gibt es noch folgende Alternativen:

a) Du übergibst ein assoziatives Array oder ein Objekt. Je nachdem, welche Keys / Eigenschaften in diesem definiert sind, kann auch ausgelesen werden.

b) Du verwendest statische Helferfunktionen zum Erstellen des Objekts:

class User
{
    // declare vars ...

    public function __construct() {
    }

    public static function withEMail($mail) {
        $instance = new self();
        $instance->mail = $mail;
        return $instance;
    }

    public static function withDatabaseId($id) {
        $instance = new self();
        $instance->databaseId = $id;
        return $instance;
    }
}

Aufruf:

$user = User::withEMail("johndoe@gmail.com");

Bei gleichem Datentyp wird es allerdings schwierig, zu unterscheiden.

Ab PHP 7 kann man ja den Datentyp mit angeben. Hab es aber noch nicht beim Konstruktor getestet.

0

Was möchtest Du wissen?