Frage

Problem

Angenommen, Sie haben einen Klassenbenutzer. Sie möchten in der Lage sein, dieses Benutzerobjekt an andere zurückzugeben, damit sie mithilfe von Gettern Informationen extrahieren können. Sie möchten jedoch nicht, dass Menschen den internen Status leicht festlegen können, da die internen Informationen direkt auf eine Zeile in der Datenbank beziehen sollten. Ist es sinnvoll, Mutatoren (Setter) zu schützen, damit nur eine erweiterte Klasse die Variablen festlegen kann? Ist das eine schlechte Praxis, irrelevant, übertrieben oder nutzlos?

Ich habe darüber nachgedacht, __construct auf eine Verwendung zu begrenzen (ich glaube, dies wird manchmal als Singleton -Muster geschafft - obwohl ich mir nicht sicher bin, ob ich vollständig verstehe.)

Ich bin ein Amateurprogramme, vergib jede Unwissenheit. Vielen Dank.

Beispiel:

<?php

    class user
    {

    private username;

    protected function set_username($username)
    {
        $this->username = $username;
    }

    public function get_username()
    {
        return $this->username;
    }

?>
War es hilfreich?

Lösung

Beruht. Wenn nichts Besonderes passieren muss, wenn der Staat geändert wird, können Sie die Setzer ganz auslassen. Jede Unterklasse hat einen direkten Zugriff auf die Eigenschaften, die geschützt oder locker sind.

Wenn Sie etwas benötigen, wenn sich der Status ändert (z. B. eine Datenbank -Update, wenn sich der Status ändert), werden die Setter Ihr Leben erheblich erleichtern, da der Aufruf des Datenbank -Aktualisierungscodes in den Setter eingefügt wird. Dies bedeutet, dass der DB immer aktualisiert wird, wenn Sie immer den Setter durchlaufen, wenn Sie den Status des Objekts ändern.

Kurz gesagt, es kommt darauf an.

Andere Tipps

Wenn Sie einen Konstruktor haben, der beispielsweise eine ID akzeptiert, warum möchten Sie dann überhaupt Setter haben? Es gibt keine Regel, die Sie zwingt, einem Objektsetzer zu geben, nur weil es Getter gibt. Wenn Ihre Usecase das Objekt irgendwo erstellt und danach nur verwendet wird, um Daten daraus zu extrahieren, erstellen Sie einfach überhaupt keinen Setter.

Erweiterende Objekte können die geschützten Klassenvariablen selbst manipulieren, damit sie auch keine Setter benötigen. Wenn Sie nicht möchten, dass die "Außenwelt" in der Lage ist, etwas in der Klasse einzustellen, lassen Sie es nicht zu.

Ihr Code ist total fein und iMho ist perfekt zusammen. TT unterstützt auch eine lose Kopplung.

Für die einfachere Verwendung können Sie alle benötigten (Muss) Mitglieder als Konstruktorparameter hinzufügen.

Verwenden Sie es in Bezug auf das Singleton -Muster mit Sorgfalt. Nutzer gemeinsam sind nicht Singletons. Siehe Refactoring auf Muster (Joshua Kerievsky).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top