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.

Schau dich mal nach "multiple constructors" um. Mit PHP musst Du das schon selbst schreiben. Hier ein Beispiel: https://stackoverflow.com/questions/31542425/type-hinting-and-multiple-constructors


Illusion1802 
Beitragsersteller
 04.10.2017, 15:42

Das sieht auch sehr hilfreich aus. Vielen Dank!

0

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");


Babelfish  04.10.2017, 17:53

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

Hallo,

ich habe dir mal ein nützlichen Forumbeitrag von einem anderen Forum gesucht:

https://www.php.de/forum/webentwicklung/php-fortgeschrittene/12975-erledigt-mehrere-konstruktoren

Gruß und viel Erfolg und Spaß!


Illusion1802 
Beitragsersteller
 04.10.2017, 15:40

Danke für die blitzschnelle Antwort! :)

Also verstehe ich das richtig, dass ich in meinem Fall den Konstruktor mit vier möglichen Attributen ausstatte und denen Null zuweise ($datenbankID = null, $email = null, $vorname = null, $nachname = null)?

Und dann überprüfe was davon nicht Null ist?

Vielen Dank!

0
Illusion1802 
Beitragsersteller
 04.10.2017, 15:45
@threadi

Oh. Sehe die Kommentare erst jetzt. Schade.

Dann versuche ich es mit der anderen Antwort. Trotzdem Danke.

0
threadi  04.10.2017, 15:40

Der dort beschrieben Weg geht mit PHP >= 5 nicht mehr.

1
Hasenanker1717  04.10.2017, 15:41
@threadi

Hallo,

ok danke! Wusste ich nicht! Beschäftige mich momentan bzw. schon seit längerem mit PHP nicht mehr!

Gruß!

0