Restrukturierungen vereinfachen mit ::class

PHP 5.5 hat eine neue dynamische Klassenkonstante ::class eingeführt, die die Wartbarkeit des Codes deutlich verbessern kann.

Funktionsweise

Um an den vollständig qualifizierten Klassennamen – also mit Namespace – zu gelangen gab es bisher die Möglichkeiten __CLASS__ und get_class().

Klassenkonstante __CLASS__

Diese liefert ohne Probleme den Klassennamen, aber funktioniert nur innerhalb der Klasse selbst.

>> Acme\SomeClass

Workaround mit get_class()

Außerhalb der Klasse musste man sich vor PHP 5.5 mit get_class() behelfen.

>> Acme\SomeClass

Das größte Problem dabei ist die Tatsache, dass man eine Instanz der Klasse genötigt.

Vereinfachung mit ::class

Den Klassennamen ohne eine Instanz können wir für PHP >= 5.5 mit SomeClass::class abfragen.

>> Acme\SomeClass


Nutzen für Testing und Restrukturierung

Bleibt noch die Frage warum das überhaupt erwähnenswert ist. Gerade bei Unittests kommt es häufig vor, dass eine Klasse simuliert werden soll. Wir wollen also keine Instanz der Klasse erzeugen, womit die get_class() Variante nicht verwendet werden kann.

Für PHP < 5.5 musste der Klassenname als String übergeben werden:

Die IDE kann hier die Verwendung der Klasse nicht erkennen.

Mit PHP 5.5 kann der Code so geschrieben werden.

Damit ist das eine echte Verwendung der Klasse und die IDE erkennt es als solche. Umstrukturierungen, bei denen sich der Name oder der Namespace der Klasse ändert, werden damit zum Kinderspiel.