En php, dois-je retourner false, null, ou un tableau vide dans une méthode qui serait normalement retourner un tableau?
J'ai trouvé plusieurs réponses à cette, mais rien concernant le PHP (qui est extrêmement faible tapé langue):
En ce qui concerne PHP, est-il approprié de renvoyer false, null, ou un tableau vide dans une méthode qui serait normalement retourner un tableau, mais il a une panne?
En d'autres termes, si un autre développeur a sauté sur mon projet, quels seraient-ils s'attendre à voir?
- Je dirais renvoie un tableau vide.
- Si vous ne travaillez pas avec des exceptions, je dirais: ne pas retourner un tableau vide en cas d'erreur. Encore plus si un tableau vide pourrait être un résultat correct.
- Renvoie un tableau vide. Si normalement, elle retourne un tableau puis de retourner un tableau ne causera pas de problèmes.
Vous devez vous connecter pour publier un commentaire.
Un tableau est une collection de choses. Un tableau vide serait le signe que "tout s'est bien passé, il n'est tout simplement pas quoi que ce soit dans la collection". Si vous souhaitez réellement le signal d'un erreur, vous devez retourner
false
. Depuis PHP est dynamiquement typé, il est facile de vérifier la valeur de retour soit strictement ou de manière souple, en fonction de ce que vous avez besoin de:Il y a aussi des exceptions pour les rapports d'erreurs dans exceptionnelle cas. Cela dépend vraiment sur les responsabilités de la fonction et de la gravité des erreurs. Si le rôle de la fonction permet à la réponse de "vide" collection " et "non" également, le ci-dessus peut être fine. Cependant, si la fonction est, par définition, doit toujours retourner une collection (même si c'est vide) et, dans certaines circonstances, il ne peut pas, en levant une exception peut être beaucoup plus approprié que de retourner
false
.null
signifie "pas de valeur", une fonction retournantnull
n'a pas vraiment de renvoyer une valeur.false
est "mauvais", "échec", "mal", "négatif".false
est étrange et peut conduire à des hypothèses erronées. Imaginez méthodeisRegistered(Client $client)
retourbool
. Si cette méthode renvoiefalse
vous ne pouvez pas être sûr que si il y avait effectivement une erreur ou d'un client n'est pas encore enregistré. Je pense que c'est beaucoup plus clair pourthrow
unException
et laisser l'appelant de choisir quoi faire aux niveaux supérieurs, quand ils ont obtenu un contexte plus large. De retourfalse
au bas niveau vous êtes à la prise de décisions relatives à l'appelant comment son code doit se comporter.bool
ouarray
. Vous avez essayé de montrer un exemple où l'on vous dit quefalse !== error
(lorsque l'utilisateur n'existe pas), mais en même temps vous êtes en retournant le code d'erreur à l'utilisateur (404 est un code d'erreur). De mon point de vue, si quelqu'un demande de l'utilisateur des commandes et l'utilisateur n'existe pas, il est tout à fait légitime pour le DOJO de la fonction lève une exception que l'utilisateur n'existe pas d'API et d'Répartiteur va choisir quoi faire avec cette exception: retour à la réponse, essayez de nom différent, de retour de valeur par défaut, ...Je déconseille vivement de retourner mixte type de valeur de retour. Je considère que c'est tellement un problème, que j'ai écrit un petit article sur pas de retour mixte des valeurs typées.
Pour répondre à votre question, renvoie un tableau vide. Vous trouverez ci-dessous un petit exemple, pour lesquelles le retour d'autres valeurs peuvent causer des problèmes:
Espère que cela aide à éviter certains malentendus.
precariousCheckEmail()
vous êtes jamais sûr de savoir comment la valeur de retour doit être vérifiée. Veuillez essayer, l'exemple sera de retourOK
quatre fois, dans l'article lié, vous pouvez trouver plus d'informations à ce sujet. Il n'est pas rare de retourtrue
en cas de succès et un message d'erreur sinon.($result == false)
au lieu de($result === false)
, j'ai vu beaucoup. Mais je voulais souligner le problème d'une façon plus générale, à mon avis éviter mixte tapé les valeurs de retour conduit à une meilleure lisibilité et un code plus stable.Parler juste pour moi, normalement, je préfère retourner un tableau vide, parce que si la fonction retourne toujours un tableau, il est sûr à utiliser avec PHP les fonctions de tableau et foreach (ils vont accepter de tableaux vides). Si vous retourner la valeur null ou false, alors vous aurez à vérifier le type du résultat avant de le transmettre à une fonction de tableau.
Si vous avez besoin de distinguer entre le cas où la méthode exécutée correctement, mais n'a pas trouvé aucun résultat, et le cas où une erreur s'est produite dans la méthode, c'est là que des exceptions viennent. Dans le premier cas, il est sûr de retourner un tableau vide. Dans ce dernier simplement retourner un tableau vide est insuffisant pour vous informer du fait qu'une erreur s'est produite. Toutefois, si vous retourner quelque chose d'autre qu'un tableau, alors vous aurez à traiter avec que dans le code appelant. Lancer une exception vous permet de gérer les erreurs d'ailleurs dans un gestionnaire d'erreur et vous permet de joindre un message et un code à l'exception de décrire le pourquoi de l'échec qui s'est passé.
Ci-dessous le pseudo-code de simplement retourner un tableau vide si nous n'avons rien trouvé de l'intérêt. Cependant, si quelque chose se passe mal lors du traitement de la liste de choses, nous avons retrouvé une exception est levée.
Il dépend de la situation et comment le mauvais est l'erreur, mais un bon (et souvent négligée, l'option est à lever une exception:
Cela permettra d'assurer que votre fonction ne manquera pas, en silence et les erreurs à ne pas passer inaperçus.
Je suppose que le type de retour de votre méthode de tableau, si vous devez retourner un tableau vide, seulement si l'exécution s'est bien passé, mais aucun résultat n'a été trouvé.
En cas d'erreur, vous devez lever une exception. Ce doit être la meilleure façon de gérer les erreurs.
Si il y a vraiment un problème, alors vous devez lever une erreur, sinon, si les critères ne sont pas satisfaits etc alors retourner un tableau vide.
Selon ce que vous préférez, mais je suggère un tableau vide pour la pour une bonne raison. Vous n'avez pas à vérifier le type de premier!
Dans tout autre cas, si vous souhaitez renvoyer false ou null, vous obtiendrez un message d'erreur à la boucle foreach.
C'est une infime différence, cependant, à mon avis, un gros. Je ne veux pas de vérifier quel type de valeur que j'ai eu, je tiens pour acquis que c'est un tableau. Si il n'y a pas de résultats, alors c'est un tableau vide.
De toute façon, autant que je suis concerné, il n'y a pas "par défaut" pour le retour des valeurs vides. Fonctions PHP natives garder de m'étonner avec des valeurs très différentes qu'il renvoie. Parfois fausses, parfois nulle, parfois un objet vide.