|
KlassenabstraktionPHP 5 führt abstrakte Klassen und Methoden ein. Abstrakt definierte Klassen dürfen nicht instanziiert werden. Jede Klasse, die wenigstens eine abstrakte Methode enthält, muss ebenso abstrakt sein. Abstrakt definierte Methoden deklarieren nur die Signatur der Methode - sie können nicht die Implementierung definieren. Wenn eine abstrakte Klasse abgeleitet wird, müssen alle in der Deklaration der Elternklasse abstrakt bezeichneten Methoden durch das Kind definiert werden. Zusätzlich müssen diese Methoden mit derselben (oder einer weniger einschränkenden) Sichtbarkeit definiert werden. Wenn die abstrakte Methode zum Beispiel als protected definiert ist, muss die Funktionsimplementierung entweder als protected oder public, aber nicht private, definiert sein. Ebenfalls müssen die Methodensignaturen zueinander passen, d.h. die Type Hints und die Anzahl der verpflichtenden Parameter muss gleich sein. Wenn zum Beispiel die Kindklasse einen optionalen Parameter definiert, den die Signatur der abstrakten Methode nicht vorsieht, dann gibt es keinen Konflikt in den Signaturen. Gleiches gilt seit PHP 5.4 für Konstruktoren. Vor 5.4. konnten die Signaturen von Konstruktoren von einander abweichen. Beispiel #1 Beispiel für abstrakte Klasse
<?phpDas oben gezeigte Beispiel erzeugt folgende Ausgabe: ConcreteClass1 FOO_ConcreteClass1 ConcreteClass2 FOO_ConcreteClass2 Beispiel #2 Abstract class example
<?phpDas oben gezeigte Beispiel erzeugt folgende Ausgabe: Mr. Pacman Mrs. Pacwoman Älterer Code, der keine nutzerdefinierten Klassen oder Funktionen mit dem Namen 'abstract' besitzt, sollte ohne Änderungen lauffähig sein. |