web-dev-qa-db-fra.com

Types de retour nullables en PHP7

PHP 7 introduit déclarations de type de retour . Ce qui signifie que je peux maintenant indiquer que la valeur de retour est une classe, une interface, un tableau, un appelable ou l'un des types scalaires nouvellement indicibles, comme cela est possible pour les paramètres de fonction.

function returnHello(): string {
    return 'hello';
}

Il arrive souvent qu'une valeur ne soit pas toujours présente et que vous puissiez renvoyer quelque chose d'un type ou null. Bien que vous puissiez rendre les paramètres nullables en définissant leur valeur par défaut sur null (DateTime $time = null), il ne semble pas y avoir de moyen de le faire pour les types de retour. Est-ce bien le cas ou est-ce que je ne trouve pas comment le faire? Ceux-ci ne fonctionnent pas:

function returnHello(): string? {
    return 'hello';
}

function returnHello(): string|null {
    return 'hello';
}
142
Jeroen De Dauw

PHP 7.1 supporte maintenant types de retour nullable . Le premier RFC auquel j'ai lié est celui qu'ils ont choisi:

function nullOrString(int $foo) : ?string
{
    return $foo%2 ? "odd" : null;
}

ancienne réponse:

Puisque mon commentaire était en fait une réponse à la question:

PHP 7 ne supportera pas encore les types de retour nullable, mais il y a n RFC pour répondre à cela, il vise à atterrir dans PHP 7.1. Si elle réussit, la syntaxe affectera alors toutes les indications de type (types de retour et indications de type):

public function returnStringOrNull(?array $optionalArray) : ?string
{
    if ($optionalArray) {
        return implode(', ', $optionalArray);//string returned here
    }
    return null;
}

Il y a aussi ne RFC concurrente pour ajouter des types d'union, qui seraient capables de faire la même chose, mais auraient un aspect différent:

public function returnStringOrNull(array|null $optionalArray) : string|null
{
    if ($optionalArray) {
        return implode(', ', $optionalArray);//string returned here
    }
    return null;
}

Pour l'instant, vous devrez écrire:

public function returnStringOrNull( array $optionalArray = null)
{
    if ($optionalArray) {
        return implode(', ', $optionalArray);
    }
}

Vous pouvez également renvoyer une chaîne vide pour qu'elle soit cohérente avec le type de retour et vérifier la valeur falsy:

public function returnStringOrNull( array $optionalArray = null) : string
{
    if ($optionalArray) {
        return implode(', ', $optionalArray);
    }
    return '';
}
//call
$string = $x->returnStringOrNull();
if (!$string) {
    $string = $x->returnStringOrNull(range(1, 10));
}
228

Les types nullables sont disponibles dans PHP 7.1.

Voici un exemple de syntaxe:

public function getName(): ?string
{
    return $this->name; // name can be null
}

PHP 7.1 est maintenant GA et vous pouvez effectuer une mise à niveau à partir de PHP 7.0 (il ne reste que quelques versions antérieures incompatibles modifications que vous devez vérifier)

63
the_nuts