Coded Culture
OOP in PHP5 Eine Klassenfahrt
Coded Culture
Na Klasse! ▶ Eine Klasse ist eine Blaupause für ein Objekt ▶ Eine Klasse besteht aus ▷ Klassenattribute(-variablen). Diese sind ohne Instanz aufrufbar. ▷ Instanzattributen(-variablen)(!= Klassenattribute). Können nur mit Instanz angesprochen werden ▷ Methoden (static und nicht static) ▷ Klassenkonstanten (!= define()). Beziehen sich nur auf eine Klasse (Klasse::methode(); self::methode()).
▶ Der Benutzer einer Klasse muss die internen Abläufe der Klasse nicht kennen. Er verwendet nur Schnittstellen. ▷ Daher ist die Sichtbarkeit wichtig. ◆ public: Von überall verwendbar ◆ private: Nur innerhalb einer Instanz der Klasse verwendbar ◆ protected: Nur innerhalb einer Instanz der Klasse oder davon abgeleiteten klassen verwendbar 13. Oktober 2006
OOP in PHP5
2
Coded Culture
Na Klasse! So sieht eine Klasse in UML Notation aus Klassenfahrt +bus:Bus #anzahlSchueler:int=0 -lehrer:Lehrer +addSchueler(schueler:Schueler)
13. Oktober 2006
OOP in PHP5
3
Coded Culture
Na Klasse! Und so sieht der Code zur Klasse aus
13. Oktober 2006
OOP in PHP5
4
Coded Culture
Was ist ein Objekt ▶ Alles ist ein Objekt. ▶ Ein Objekt besteht aus Attributen und Methoden
13. Oktober 2006
OOP in PHP5
5
Coded Culture
Und wie bekomme ich nun das Objekt? ▶ Aus einer Klasse ▶ Ein Objekt ist eine Instanz einer Klasse. ▶ Durch den Aufruf eines Konstruktors („new Klasse“) wird ein Objekt instanziert. ▶ Bei zerstören eines Objektes wird der Destruktor aufgerufen. ▶ Klassenelemente können ohne Instanzzierung benutzt werden ▷ Klassenkonstanten ▷ Statische (static) Methoden und Variablen
13. Oktober 2006
OOP in PHP5
6
Coded Culture
Wer mit wem und warum?
Speicher Block
$o
Block Block
$p
Block
13. Oktober 2006
OOP in PHP5
7
Coded Culture
Wer mit wem und warum?
Speicher Block
$o
Block Block
$p
Block
13. Oktober 2006
OOP in PHP5
8
Coded Culture
Was für´n Typ ▶ Mit Typisierung erzwingt man die korrekte Paramterübergabe. ▶ Typsicherheit. Man kann sich immer sicher sein, mit welchem Typ man es zu tun hat. ▷ Wichtig damit der Benutzter der Klasse weiß welche Typen die Parameter haben.
▶ Schlüssel zur Polymorphie ▶ Arbeitserleichterung ▷ public ▷ statt ▷ public
function setLehrer(Lehrer $lehrer){}
function setLehrer($lehrer){ if($lehrer instanceof Lehrer){ throw new Exception(´$lehrer muss vom Typ Lehrer sein´, 1); } }
13. Oktober 2006
OOP in PHP5
9
Coded Culture
Sündenfall! ▶ Wie behandle ich Fehler und Ausnahmen. ▶ Statt bei Fehlern das Programm abbrechen zu lassen kann man diese an den Aufrufenden weitergeben. ▶ Hilfsmittel, um Ausnahmen oder auftretende Fehler „anderer“ Klassen ohne Wissen des Inhalts dieser Klassen behandeln zu können. ▶ Der komplette „trace“ des Fehler wird angezeigt falls diese nicht vorher abgefangen wurde (try{}catch(){}). ▷ Hilfreich um den Fehler zu finden.
▶ Man kann eigene Exception erstellen in dem man von der Grundklasse „Exception“ ableitet. So kann der Benutzer genauer bestimmen welche Exception er behandeln will. 13. Oktober 2006
OOP in PHP5
10
Coded Culture
Sündenfall! Und so sieht der Code zur Klasse aus public function setLehrer($lehrer){ if($lehrer instanceof Lehrer){ throw new Exception(´$lehrer muss vom Typ Lehrer sein´, 1); } } $klassenfahrt = new Klassenfahrt(); $lehrer = new Schueler(); try { $klassenfahrt->setLehrer($lehrer); } catch (Exception $e){ throw $e; // Einfache Weitergabe echo $e->getMessage(); // Ausgabe der Fehlermeldung }
13. Oktober 2006
OOP in PHP5
11
Coded Culture
Was wurde nicht besprochen? ▶ ▶ ▶ ▶ ▶ ▶ ▶ ▶
13. Oktober 2006
Cloning Reflection PhpDoc Überladung (_set, _get) Final Magische methoden (__toString) Iteration (foreach) Autoloading OOP in PHP5
12
Coded Culture
Vielen Dank… …für die Aufmerksamkeit und das Interesse!
Für Fragen und Kritik
Reto M. Kiefer
[email protected] Daniel Kopp
[email protected] www.codedculture.com
13. Oktober 2006
OOP in PHP5
13