• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

grundsätzliche Frage für __set() und __get()

Michael85

Neues Mitglied
Hallo, ich hab jetzt schon einige Zeit dafür verwendet um den Sinn von __set()und __get() zu sehen.
Was ich bis jetzt festgestellt habe ist, dass man damit Eigenschaften welche nicht vorhanden sind lesen und schreiben kann bzw. auf private Eigenschaften einer Klasse zugreifen kann.

Jedoch finde ich keinen Sinn dahinter. Warum eine Eigenschaft beschreiben, welche in der Klasse nicht verwendet wird. Warum auf eine private Eigenschaft zugreifen?

Ich möchte jetzt niemanden zu nahe treten, aber wenn ich solche Aktionen machen muss, dann hab ich ja schon beim Design den Patzer drinnen.

Was sind die häufigsten magischen Methoden, die Ihr verwendet?!

lg Michael
 
Werbung:
Ein Anwendungsfall der mir spontan zu __get() und __set() einfällt, wäre ein ORM welches ohne vorherige Definierung einer DB-Struktur auskommt. __get() und __set() wären dann dazu da um die DB-Felder anzusprechen. Auch wäre es denkbar in einer solchen ORM-Klasse die __clone() Methode einzubauen, um Änderungen an den Daten erstmal an einer Kopie des Original-Objektes durchzuführen. Alternativ zu __get() und __set() kann man auch das ArrayAccess-Interface in eine Klasse implementieren und später ein Objekt direkt als Array ansprechen.

Was mein allgemeinen Gebrauch von magischen Methoden angeht: __construct() durchgehend, sehr selten mal ein __toString() und wenn ich gedenke das Facade-Pattern umzusetzen, dann greife ich auf __callStatic() und __call() zurück. Ansonsten halte ich Abstand von __get() und __set(), zumal meine IDE auch entsprechende Getter- und Setter-Methoden generieren kann.

Grüße
 
Hallo, ich hab jetzt schon einige Zeit dafür verwendet um den Sinn von __set()und __get() zu sehen.
Was ich bis jetzt festgestellt habe ist, dass man damit Eigenschaften welche nicht vorhanden sind lesen und schreiben kann bzw. auf private Eigenschaften einer Klasse zugreifen kann.

Jedoch finde ich keinen Sinn dahinter. Warum eine Eigenschaft beschreiben, welche in der Klasse nicht verwendet wird. Warum auf eine private Eigenschaft zugreifen?

Ich möchte jetzt niemanden zu nahe treten, aber wenn ich solche Aktionen machen muss, dann hab ich ja schon beim Design den Patzer drinnen.

Was sind die häufigsten magischen Methoden, die Ihr verwendet?!

lg Michael

Ich hatte praktisch auch noch keine Anwendung dafür.
Du kannst damit auch einer Variable auch eine Logik verpassen:

PHP:
class Form {
  private $html;
  private $someVar;

  public function __get($method)
  {
    $m = 'get'.ucfirst($method);
    if(method_exists($this,$m)) {
      return $this->$m();
    }
  }

  public function getHtml()
  {
    // Hier findet ein logischer Ablauf statt
    $this->html = '<form>'.$this->someVar.'</form>';
    return $this->html;
  }
}

$form = new Form();
echo $form->html;

Das ist natürlich noch nicht optimal, zeigt aber hoffentlich was ich meine.

Umfangreichere Ergebnisse/Berechnungen könnte man so auch cachen.
 
Zuletzt bearbeitet:
Werbung:
Zurück
Oben