Une fonction PHP est faite de 3 choses :

  • Son code
  • Sa documentation (via PHPDoc)
  • Son prototype

En PHP, le prototype d’une fonction (également appelé sa « signature ») est constitué du nom, des arguments et, depuis PHP 7, de son type de retour.

Les arguments peuvent être typés, ça s’appelle un “type-hint”, et depuis PHP 7 nous pouvons type un argument avec des types scalaires (bool, int, string …), mais comme PHP est aussi orienté objet, nous pouvons typer avec une classe. De plus, les arguments peuvent avoir une valeur par défaut.

Exemple de base :

public function __construct($a, $b, $c) { /* */ }

Ici aucun type, mais la signature utilise 3 arguments.

Un exemple plus complet :

public function loginAction(
    Request $request,
    string $username,
    bool $useReferer = true
): Response
{
    // ...
}

Ici, nous avons un type-hint scalaire pour $username et $useReferer, et un type-hint de classe pour $request. Nous avons même une valeur par défaut pour $useReferer qui est à true.

Le type de retour et ici de Response. Cela signifie que loginAction() DOIT retourner une instance de la classe Response, sinon PHP lève une exception lors de l’exécution.

Le type de retour est similaire au type d’argument : il accepte les classes et les scalaires, mais depuis PHP 7.1, il accepte également un type de retour particulier : void.

Le type de retour void signifie que l’instruction return dans la méthode/fonction ne doit jamais avoir d’argument. Avec un type de retour void, nous ne pouvons jamais faire quelque chose comme return 1; ou return $response, sinon PHP lève une exception à l’exécution.

On ne peut écrire que return; avec le type de retour void.

Mais rien n’empêche de faire quelque chose comme ça :

function test(): void {
    echo "ok";
    
    return;
}
$a = test();
var_dump($a);
// Outputs:
// "ok"
// null

Vous pouvez aller lire la RFC de void pour plus d’informations.