Wenn Sie eine PHP-Klasse definieren, welche ist die bevorzugte / beste Vorgehensweise? Gibt es irgendwelche wichtigen Unterschiede, die ich übersehen habe?
Es scheint, als könnte es einfacher, übersichtlicher und bequemer sein, eine __set()
magic-Methode zu schreiben und ein switch()
-Konstrukt darin einzufügen mit Fällen für alle privaten Mitglieder, denen ich den Zugriff erlauben möchte. Es würde nicht automatisch aus der Klasse heraus aufgerufen, aber auch nicht setFoo()
, also wenn ich den Accessor / Mutator intern verwenden möchte, müsste ich eine Methode explizit aufrufen.
Der andere Unterschied besteht darin, dass ich im Code außerhalb der Klasse immer auf vars zugreifen konnte, genauso wie $obj->foo
, ob öffentlich (direkt) oder privat (mit __set()
), anstatt viele separate Methoden zu verwenden.
Ich denke, das kommt hauptsächlich auf eine ästhetische Entscheidung an. Zum Beispiel, wenn ich Adressdaten für einen Kauf habe, möchte ich nicht 16 oder mehr separate Accessor-Methoden nur für Vorname, Nachname, Adresse1, Adresse2, Stadt, Staat usw. für Versand- und Rechnungsdaten haben.
Gibt es irgendwelche wichtigen Unterschiede, die ich übersehen habe? (Könnte eine ausgeklügelte IDE es ablehnen, einen Mitgliedsnamen außerhalb der Klasse automatisch zu vervollständigen, weil dieser als privat markiert ist?) Habe ich meine eigene ursprüngliche Frage so ziemlich beantwortet? Vielen Dank im Voraus für Ihre Eingabe.
Gehen Sie mit den einzelnen Accessoren für jedes Mitglied, das Sie von außen zugänglich sein wollen. Ich habe beide versucht und diese Gründe gefunden, die Accessoren zu benutzen:
$numbers = &$object->getNumbers(); $numbers[] = 4;
- ohne die Referenz, müssen Sie den Setter erneut aufrufen.) Der größte Unterschied, den ich sehe, ist mit phpdoc:
__set
, können Sie phpdoc nicht für jeden Accessor @property
könnte in diesem Punkt jedoch helfen) . Persönlich würde ich selbst mit Definition von Accessoren gehen, auch wenn es bedeutet, etwas mehr Code zu schreiben:
__set
-Methode. Auch würde ich diese Accessor-Methoden verwenden, wenn ich Eigenschaften innerhalb der Klasse einstelle: es bedeutet ein bisschen mehr Code, ja - aber es bedeutet auch, den spezifischen Code durchzugehen (wie Code, um einige Sachen zu überprüfen), die sie enthalten / p>
Wenn Sie schließlich nur einige Eigenschaften zum Speichern von Daten verwenden und kein bestimmtes Verhalten definieren müssen, warum sollten Sie sie nicht als öffentlich verfügbar machen und Benutzern den direkten Zugriff ermöglichen?
Tags und Links php oop coding-style