php 7.x – Good will hinting!

Eigentlich kennt das jeder Entwickler: Wir wissen, dass man Test-driven-development machen sollte… Das wäre der optimale Weg. Dann kommt der Arbeitsalltag und man “macht mal schnell” ne Änderung. Auch lesen wir uns immer mal wieder in Unit-Tests ein, um damit endlich mal zu beginnen. Und? Nächstes Projekt, wieder keine Zeit zum unit-testen…
Auch wenn wir über kurz oder lang nicht darum herumkommen, unseren Code ausgiebig zu testen, nimmt uns php immer mehr Arbeit (und Fehleranfälligkeit) ab. Die aktuellsten php-Versionen ab 7.0 bieten endlich nahzu vollständiges Type-hinting. Vorbei ist es mit der Schludrigkeit der Variablen unter php. Wenn der Entwickler es richtig macht!


Viele von uns haben sich relativ früh ein eigenes Schema ausgedacht, wenn es darum geht Variablen in php zu benennen. Das ist durchaus sinnvoll auch heute noch. Was nicht mehr aktuell ist, ist die Tatsache, dass diese Namensgebung die einzige Möglichkeit ist, der nicht vorhandenen Typsicherheit in php Herr zu werden. Der Entwickler muss sich nicht mehr darauf verlassen, dass Coworker anhand der Namensgebung schon richtige Werte mitgeben werden. Viele der zwangsweise benutzten Typecastings sind nicht mehr nötig und einige Exceptions werden nicht mehr geworfen, wenn man richtig “hintet”.

Früher sahen Funktionen und Methoden so aus:

function meineFunktion($strParam1, $intParam2) {

  // mach was und fange evtl. Ausnahmen ab...

  $strParam1 = (string) $strParam1;

  $intParam2 = (int) $intParam2;

  return $mixedIrgendwas;

}

Seit dem Beginn des Typehintings in php wurde dieses stetig ausgebaut und ermöglicht mittlerweile sehr strenge Konstrukt, wie das folgende Beispiel:

function meineBessereFunktion (string $strParam1, int $intParam2, ?array $arrParam3) : ?string {

  //irgendwas

}

Wir schlüsseln mal die neuen Möglichkeiten auf:

string $strParam1

int $intParam2

Das ist denke ich selbsterklärend, hier wird ein Parameter vom Type String bzw. Integer erwartet. Falls der Parameter eine anderer Type sein sollte, gibt es einen “Fatal Error”!

?array $arrParam3

Diese Neuerung ist sehr angenehm: Hier wird ein Array erwartet ODER Null! Damit kann man trotz strengem type-hinting optionale Parameter realisieren.

: ?string

Auch dies ist neu: Wir können in der Kopfzeile einer Methode deren Rückgabewert bestimmen. Auch hier bestimmt das Fragezeichen vor dem Typ, dass entweder keine Rückgabe erfolgt, aber falls doch, dann zwingend vom Typ String

Die Tatsache, dass simple “Falschaufrufe” von Methoden und Funktionen mit diesem Hinting direkt einen Fehler werfen führt zu einem deutlich bewussterem Umgang mit diesen Methoden. Einige Unittests, zumindest die relativ simplen Tests können somit (mal wieder) entfallen.

One thought on “php 7.x – Good will hinting!

Schreibe einen Kommentar

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.