OOP
Objektorientierte Programmierung (Object Oriented Programming)
siehe auch Wikipedia.de: Objektorientierte Programmierung
Die grundlegende Syntax der OOP wurde in sehr eingeschränkter Form in PHP 3 eingeführt. Mit PHP 4 waren die Möglichkeiten für OOP noch sehr begrenzt, erst mit PHP 5 wurde das Objekt-Modell wesentlich erweitert und, für einige Experten, erst wirklich brauchbar.
Besonderheiten des OOP in PHP
ToDo: Dieser Artikel muss an dieser Stelle mit Folgendem ergänzt werden:Besonderheiten und Features der Objektorientierten Programmierung in PHP (Vergleich zu anderen Programmiersprachen?)
Der Zugriff auf Eigenschaften und Methoden erfolgt nicht wie etwa in Java über den Punktoperator (.), sondern über den Pfeiloperator (->) und auf statische Objekte mit doppeltem Doppelpunkt (::) Scope Resolution Operator.
Unter PHP stehen zur direkten Verwendung sehr viele und schnelle Stringfunktionen zu Verfügung.
Wie in OOP-Sprachen gebräuchlich gibt es auch einen Zeiger $this (Selbstreferenz) auf das aktuelle Objekt oder das auf das aktuelle Exemplar (instance) der Klasse zeigt.
Polymorphismus, Vielgestaltigkeit durch virtuelle Methoden oder durch das Überladen von Methoden wird oft realisiert durch:
- Übergabe eines assoziativen Arrays an eine Funktion und entsprechend ihres Types reagieren,
- Variablen mit einem Defaultwert im Funktionskopf zu versehen (ähnl. statischen, frühen Bindung) oder
- mit func_get_args übergebene Argumente in ein Array schreiben und eine Art späte, dynamische Bindung
- unter Verwendung magischer Methoden, Methodenaufrufe und Zugriffe auf Member mit __call(), __get(), __set() Methoden überladen und seit PHP 5 __isset(), __unset() zum Überladen von isset() und unset(), sowie (string) überladbar durch __toString().
Wie in anderen automatisch typisierten Sprachen ist es möglich typsicher zu prüfen, z.B: mit === auf 0 zu prüfen, da sonst (über == ) auch ein boolean in Frage kommen würden.
In PHP 4 waren alle Methoden public, s. Geltungsbereich(scope). Seit PHP 5 kann vor jeder Klasse und Funktion ein Zugriffsspezifierer von Variablen und Methoden verwendet werden, s. Sichtbarkeit.
Im Gegensatz zu C++ (private ohne Angabe) wird standardmässig public intepretiert und es wird auch wie in Java keine Mehrfachvererbung (das Ableiten mehrerer Basisklassen) unterstützt.
Das Schlüsselwort final zur Deklarierung von Members und Methoden um nicht von Subklassen überschrieben zu werden,
kann auch Klassen vorangestellt werden, dadurch ist eine finale Klasse nicht veerbbar und alle darin enthaltenen Methoden sind folglicherweise final.
Seit PHP 5 ist ein Vergleich auf __FUNCTION__ (und Klasse) casesensitiv, Funktionen werden aber nicht casesensitiv behandelt. Variablen sind casesensitiv. Es besteht die Möglichkeit des Type Hinting, in Form von Klassenanagabe vor dem Parameter (nur Objekte) in Methoden oder Funktionen.
Eine Besonderheit der OOP mit PHP sind die magischen Methoden.
- __construct() - Konstruktorfunktion (in PHP 4 gab es den Konstruktor als function mit Klassenname)
- __destruct() - Destruktor wird z.B: nach Abarbeitung des Skriptes ausgeführt, expliziter Aufruf möglich.
- __set() - Setter, praktisch anwendbar in Klassen mit $this
- __get() - Getter, praktisch anwendbar in Klassen mit return
- __call() - Interceptor zur Auswertung, Behandlung von Aufrufen nicht deklarierter Methoden und Funktionen.
- __toString() - Hilfefunktion zur Konvertierung
- __autoload() - Aufruf bei Erzeugung einer neuen Instanz
Schlüsselworte/Funktionen für OOP
- class - definiert eine Klasse
- var - definiert Eigenschaften (veraltet seit PHP 5)
- function - definiert Methoden
- public - Methode oder Eigenschaft außerhalb des Objekts verfügbar
- protected - Methode oder Eigenschaft nur innerhalb der Objekts verfügbar
- private - Methode wird nicht weitervererbt
- final - Klasse kann nicht vererbt werden, Methode kann nicht geändert werden
- abstract - Methode muss in einer abgeleiteten Klasse erst defniert werden
- static - Methode oder Eigenschaft ist nur statisch aufrufbar, also in einem Objekt nicht verfügbar
- implements - implementiert ein Interface
- extends - beerbt eine Klasse mit ihren Methoden und Members
- instanceof - überprüft ob ein Objekt eine Instanz einer Klasse ist
- is_a() - überprüft ob ein Objekt eine Instanz einer Klasse ist (depracated, instanceof wird empfohlen)