2013-04-30 4 views
3

Je comprends que ce sujet a été brièvement abordé here mais j'espère comprendre les choses à faire et à ne pas faire en général en utilisant plusieurs types de retour en PHP. Il semble y avoir des opinions variées sur cette fonctionnalité de PHP. J'aurais tendance à être d'accord que, comme indiqué dans le fil lié ci-dessus, pour les erreurs, l'utilisation d'exceptions est probablement plus approprié; Mais, qu'en est-il d'une fonction renvoyant, disons, deux types de valeurs significatives? Par exemple, disons une fonction qui renvoie toutes les lumières qui sont éteintes dans une maison (:) oui, je l'aile!)PHP Best Practice: Utilisation de types de retour mixtes

Essentiellement, voici ce que je veux transmettre: Si une condition de base n'est pas rencontré et je ne vois pas l'intérêt d'aller de l'avant et de calculer ma liste, je renvoie un booléen. Sinon, allez-y et faire:

public function getLightsThatAreOff($house) 
    { 
     // if $house itself does not have any power, return true 
     // else 
       //compile an array of lights that are off and return then 
    } 

Je pense que le cas d'utilisation mentionnée ci-dessus est une sorte d'un sweet spot pour plusieurs types de retour. Dans les deux cas, j'apprécierais que quelqu'un fournisse un ensemble de directives générales sur la façon de déterminer s'il faut ou non utiliser cette fonction.

Merci!

+0

Je dirais personnellement que getLightsThatAreOff() n'a de sens que lorsque la puissance est en marche. Lorsqu'on l'appelle quand le courant est coupé, je dirais que cela a des conséquences insignifiantes. –

Répondre

6

Les types mixtes ne sont pas bons, même s'ils sont bien documentés. Par exemple, si une méthode renvoie un tableau, mais qu'il n'y a rien à retourner, alors il devrait s'agir d'un tableau vide, non faux ou autre chose. dire

array() 
+1

Je suppose que d'être prudent est probablement une bonne approche: éviter les types mixtes autant que possible? – user2334532

+1

Oui, évitez de mélanger - la plupart du temps c'est possible –

+0

Aussi le type strict PHP7 ne permettra pas le type mixte ou null. –

0

Cela dépend vraiment de la façon dont vous envisagez d'utiliser ces fonctions. Même si vous faites partie d'une grande équipe de développement, tant que vous documentez votre code de manière efficace, vous devriez pouvoir renvoyer en toute sécurité les types mixtes. Si vous développez pour vous-même, cela n'a pas vraiment d'importance, tant que vous savez comment et où utiliser vos fonctions.

Je dirai cependant, par expérience personnelle, que chaque fois que vous pouvez alléger la possibilité d'une erreur, vous devriez le faire. Cela signifie que si la valeur de retour attendue d'une fonction est un tableau, vous devriez retourner un tableau vide au lieu d'un booléen (faux). De cette façon, même si quelqu'un ne lit pas votre documentation, le pire qui puisse arriver est que lorsque vous essayez de faire défiler le tableau, rien ne se passe et le script continue. Si vous ne pouvez pas prévoir cela causant des problèmes, je recommande fortement de le faire de cette façon au lieu de simplement retourner faux. Je ne peux même pas compter combien de fois j'ai entendu "votre classe de base de données est cassée" quand j'ai renvoyé faux au lieu d'un tableau de résultats si la requête a échoué.

+3

Que vous fassiez partie d'une équipe non pertinente, vous devez toujours écrire la fonction de la façon la plus sensée et avoir le moins d'inconvénients. Un inconvénient des types de retour mélangés peut être une surcharge dans le traitement des valeurs de retour du côté de l'appelant. – deceze