Klassen-Konstanten in PHP 5.3

Seit PHP Version 5.3 gibt es einige Verbesserungen bei den Klassen-Konstanten. Hier mal ein kleines Beispiel:

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:

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.