Hi!
class siteBuilder {
protected $html; // warum sollte das public sein?
Warum nicht?
Weil die Getter-Methode dann sinnfrei ist.
Ja, so gesehen hast du Recht. Ob sich venty allerdings bewusst ist, warum er da einen Getter verwendet, oder das einfach nur irgendwo gesehen und nun vielleicht unnötigerweise implementiert hat, wäre wissenswert, für eine genauere Beurteilung.
Man könnte hier auch ein wenig PHP-Magie anwenden und __get benutzen.
Das würde ich mal geflissentlich übergehen, weil venty offensichtlich noch Klassen-Anfänger ist und erstmal die Grundlagen beherrschen sollte, bevor er sich an die Magie ranwagt.
Oder auch: warum protected und nicht private?
Das ist eine Design-Frage - wenn die Klasse nicht bestimmbar final ist, wähle ich immer protected, da evtl. geerbt werden wird.
Eben. Dazu müssen wir wie gesagt, die Umstände kennen.
Es gibt keine Verordnung, dass Eigenschaften nicht öffentlich sein dürfen.
Wo habe ich denn verordnet?
Hast du nicht, aber weil du so selbstverständlich davon ausgingst, dass das nicht public zu sein hat, vermutete ich dich als Getter/Setter-Hardliner. Im Hinblick auf den Getter wirst du vermutlich nur gedacht haben: Wenn schon Getter, dann aber richtig.
Ebenso gibt es keine, dass auf Eigenschaften nur über Zugriffsmethoden zugegriffen werden darf.
Es ist aber eine Getter-Methode im vorliegenden Fall vorhanden, oder?
Ja, ich war nur etwas zu unaufmerksam, um sie als solche zu erkennen.
Inwieweit das eine oder andere sinnvoll ist, hängt von der Aufgabenstellung ab, die uns jedoch nicht bekannt ist.
Ja - ACK! Mein Beitrag war auch nur als Vorschlag und Hilfestellung beim Bau der *ersten* Klasse zu verstehen und nicht als Dogma;-)
Ich will es gar nicht erst soweit kommen lassen, dass er sich da ein Dogma angewöhnt. Besser finde ich es, möglichst neutral alle Möglichkeiten kennenzulernen und sich dann Wissen anzulesen und Erfahrungen zu sammeln, wann was mit welchen Vor- und Nachteilen verwendet werden kann.
public function getHTML($template) {
// hier fehlt eine Prüfung, ob $template ok ist!!
"ok" in welcher Hinsicht?
Gültig, zulässig - das sollte aber OP nachfragen denn Dir untetrstelle ich, dass Du weißt was ich meine.
Das ist die Frage, ob die Funktion auch zuständig sein soll, einen Zugriff auf Dateien außerhalb des Template-Verzeichnisses zu verhindern. Man könnte es vermuten, weil er da den Namen des Template-Verzeichnisses fest eincodiert hat. (Das feste Eincodieren ist aber nicht unbedingt sinnvoll im Hinblick auf eine Wiederverwendbarkeit der Funktion/Klasse.) Ein Test auf in $template enthaltene / und \ wäre vermutlich angebracht, ebenso ob der Inhalt mit einem . anfängt (versteckte Dateien wie .htaccess).
venty: Hast du auch daran gedacht, dass der Dateizugriff aus vielerlei Gründen misslingen kann?
Ich habe daran gedacht, deshalb mein Hinweis.
Das ist ja der zweite Teil. Selbst wenn der Name des Templates einer Prüfung standhält, kann beim Zugriff ein Fehler auftreten. Den kann man schlecht mit einer Prüfung von $template erkennen, da muss man den Rückgabewert von file_get_contents() auswerten (auf false testen).
Außerdem wäre zu überlegen, wie sinnvoll es ist, den Zugriff so zu trennen.
Ich habe OP so vertsanden, dass das Beispiel zu Lernzwecken dienen soll - "erstelle das erste mal eine klasse".
Da kommt es auf das Lernziel an. Ist es Getter kennenzulernen oder wie man die Aufgabenstellung "Hole mir das Template" sinnvollerweise löst?
Lo!