Seit PHP Version 5.3 gibt es einige Verbesserungen bei den Klassen-Konstanten. Hier mal ein kleines Beispiel:
View Code PHP
abstract class Auto { public function getAutoName() { return self::AUTO_NAME; } } class Golf extends Auto { const AUTO_NAME = "Golf"; } $auto = new Golf(); echo $auto->getAutoName(); |
Wer dieses Beispiel in PHP 5.2 ausführt, bekommt eine Fehlermeldung „Fatal error: Undefined class constant ‚AUTO_NAME‘ in /htdocs/test.php on line 7“. Der Grund ist einfach: Die Konstante AUTO_NAME kann nicht von der Eltern-Klassen aufgerufen werden. Jetzt kommen wir zur Neuerung in PHP 5.3. Wir ändern lediglich eine Kleinigkeit:
View Code PHP
abstract class Auto { public function getAutoName() { return $this::AUTO_NAME; } } class Golf extends Auto { const AUTO_NAME = "Golf"; } $auto = new Golf(); echo $auto->getAutoName(); |
Aus dem self:: wird ein $this:: und schon gibt uns PHP das richtige Ergebnis aus. Außerdem könnte man die Konstante noch direkt über das Objekt ausgeben mit $auto::AUTO_NAME, aber auch das ist erst seit PHP 5.3 möglich.