Mir entzieht sich irgendwie der Sinn, warum man ein komplett auf PHP5-basierendes Projekt schon vorgesetzt bekommen möchte - Der Lerneffekt wäre irgendwie gleich null.
In Sachen Tutorials finde ich sogar die PHP-Doku sehr aufschlussreich, und wenn mal doch ein Wort unklar ist, wie zB Interface oder Überladungen, kann man auch gerne mal schauen, was C++ Hilfen dazu meinen.
Und damit ich auch noch mit einem Link aufwarten kann, empfehle ich mein
Lieblingsframework (made by Zend) - Baut vollständig auf PHP5 auf, ist aber kein vorgefertigtes Projekt. Besonders die View-Klasse hat es mir irgendwie angetan.
Zur Geschichte "public" vs "protected" vs "private": Ich weiß nicht, wie viele Leute das Wort "objektorientiert" ernst nehmen, die alle Eigenschaften eines Objekts publik maskieren, nur weil sie denken, dass eh nur sie darauf Zugriff hätte
Klar ist es einfacher, die Eigenschaften immer direkt, auch von außen, anzuwählen, aber was ist denn, wenn man nun wirklich mal ein paar Änderungen vornimmt, die man durch eine Set- oder Get-Methode viel einfacher und produktiver hätte umsetzen können?
Mal abgesehen davon, dass es im Falle einer einzigen Anwendung des Objekts von einem einzigen Anwender keinen Unterschied macht, ob public oder private, habe ich schon so oft Klassen geschrieben, deren Eigenschaften in einem Resultat enden müssen - Und da überprüfe ich lieber gleich bei der Eingabe, ob diese auch korrekt ist, und forme mir diese so, wie ich es möchte, als das dann final nochmal hin- und herzuschrauben. Einfaches Beispiel: In meiner FileUpload Klasse kann ich ein Ziel-Verzeichnis bestimmen, welches ich über eine passende set-Methode erstmal auf Existenz überprüfe. Das verschafft mir die Möglichkeit, es entweder noch zu erstellen oder eine Exception zu werfen oder eine andere Warnung auszugeben. Gleiches gilt für das Setzen des Dateinamen: Über ein preg_match wird überprüft, ob der gewünschte Dateiname valide ist, ansonsten wird wieder mit Steinen geworfen.
Würde ich das alles von außen über zB
$upload->_directory = '/dieses/verzeichnis/existiert/nicht/ setzen, hätte ich beim endgültigen Upload-Befehl einige Probleme, die über den korrekteren Einsatz von OOP umgangen werden können.