Hi!
Ich seh halt den Vorteil darin, falls ich mal in Verbindung mit dem Auslesen der Variable etwas anderes Verknüpfen will, hätte ich mit einer eigenen GET Methode ein leichtes Spiel. Angenommen ich will die Zugriffe protokollieren. Oder ich möchte den Wert vor dem Zurückgeben abändern. Mit einer eigenen GET Methode wäre ich da flexibel.
Du musst selbst einschätzen, wie realistisch oder hypothetisch diese Szenarien sind. Flexibilität kommt immer mit einer höheren Komplexität daher, die sich im erhöhten Rechenaufwand widerspiegelt. Letzterem kann man mit schnellerer Hardware begegnen, die Komplexität im Code und dessen Wartung bleibt.
Ein Kompromiss wäre, zunächst einmal die Eigenschaften auf public zu setzen, für die auf absehbare Zeit kein zusätzlicher Code im Getter/Setter geplant ist. Wenn dann doch der Fall eintritt, kann man die Eigenschaft umbenennen (zum Beispiel mit _ davor), sie private machen und mittels __get()/__set()-Overloading implizite Getter/Setter hinzufügen.
Außerdem gibt es Software-Pattern wie den Decorator.
Ja, ok. Ich überleg nur gerade was schöner ist:
echo $object->getName();
//oder
$array = object->getData();
echo $array['name'];
Hinzu kommt noch, was praktischer ist. Eine entsprechende IDE kann bei Eigenschaften und Methoden eines Objekts automatisch Code vervollständigen, wenn dessen Klassendefinition bekannt ist. Bei Array-Keys geht das nicht, denn die sind nur Strings, und welche davon im Array sind, ist zur Programmierzeit auch nicht unbedingt der IDE bekannt.
Im Grunde ist diese Überlegung aber nicht notwendig, denn wenn du Einzelzugriffe haben willst, musst du nicht über den Umweg eines gemeinsamen Abrufs und anschließender Separierung gehen. Ein gemeinsamer Abruf ist nur dann sinnvoll, wenn die Daten (oder ein Teil davon) gemeinsam weitergegeben werden sollen.
> > Dann hast du nicht mehr nur 20 Methodenaufrufe sondern insgesamt 21.
> Aber von außen hätte ich dann nur noch eine Methode die ich aufrufen kann/muss. Also nur eine Methode als public und hätte trotzdem die Vorteile der GET Methoden da sie weiterhin Klassenintern verwendet werden.
Es geht in der von dir gelesenen Empfehlung vermutlich nicht darum, wieviele Methoden public sind oder nicht, sondern wieviele zur Erledigung der Aufgabe aufgerufen werden müssen.
> Aber es ist schlecht sowas immer pauschal bestimmen zu wollen. Jeder findet etwas anderes schön und elegant. Ich dachte nur das es da vielleicht schon gewisse Standards gibt.
Bei Java ist es ein Standard, mit definiert benannten Gettern und Settern zu arbeiten, da einige Bibliotheken auf diese Konventionen abgestimmt sind. Für PHP gibt es einen derartigen übergreifenden Standard nicht.
Lo!