89 votes

Plusieurs types de retour php 7

J'ai quelques méthodes qui peuvent retourner l' un des deux types de retour - (j'utilise un framework utilisant MCV, donc la refactorisation de ces quelques fonctions en particulier n'est pas attrayante)

Est-il possible de déclarer le type de retour retournant l'un ou l'autre et échouant sur autre chose?

 function test(): ?
{
    if ($this->condition === false) {
        return FailObject;
    }

    return SucceedObject;
}
 

161voto

bishop Points 3309

À partir de maintenant, la prise en charge est pour les deux objets, le partage d'une interface. Exemple:

interface ReturnInterface {}
class FailObject implements ReturnInterface {}
class SuccessObject implements ReturnInterface {}
function test(): ReturnInterface {}

Dans cet exemple, ReturnInterface est vide. Sa simple présence prend en charge le nécessaire retour de la déclaration de type.

Avertissement:
La suite discuté de la RFC (types d'Union) a été diminué
https://wiki.php.net/rfc/union_types

Il est actif, chaud discussion sur les types d'union avec plusieurs concurrents RFC. Si l'un de ces pass, puis une proposition de signature:

function test(): FailObject|SuccessObject {}

Cela dit, je préfère l'approche de l'interface indépendamment des types d'union. Pour moi, il est plus clair et plus extensible. Si plus tard, je veux un WarnObject j'ai simplement besoin de se définir comme une extension de l' ReturnInterface - plutôt que de passer par toutes les signatures et les mettre à jour à l' FailObject|SuccessObject|WarnObject.

85voto

david.lee Points 216

Comme indiqué par l'évêque, il y a une RFC pour l'ajout de plusieurs types de retour. Cependant, je pensais que je voudrais ajouter qu'en tant que de PHP7.1 vous pouvez maintenant spécifier un nullable type de retour comme ceci:

function exampleFunction(string $input) : ?int
{
    // Do something
}

De sorte que cette fonction serait de prendre une chaîne et en ajoutant le point d'interrogation avant d'int vous permettant de retourner la valeur null ou un entier.

Voici un lien vers la documentation: http://php.net/manual/en/functions.returning-values.php

Et voici une citation de la page expliquant l'usage: PHP 7.1 permet de nuls et de nulle types de retour par précédant la déclaration de type de avec une ? - (par exemple, la fonction canReturnNullorString(): ?chaîne de caractères)

Aussi, voici un autre thread qui se rapporte à ceci: Nullable types de retour dans PHP7

27voto

visualex Points 563

PHP 7.2 prend désormais en charge le type de retour d'objet

http://php.net/manual/en/migration72.new-features.php

 function test(object $obj) : object
// return any type of object ...
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X