Dynamic-Mess.com


"The world is a dynamic mess of jiggling things..."

Retourner des types différents en PHP : une mauvaise pratique?

Article posté le 02-11-2015 dans la catégorie PHP

Article mis à jour le : 05-05-2022

Est-ce que retourner des types différents dans une fonction PHP est une mauvaise pratique

Suite à une discussion que j'avais eu avec un collègue, à propos du fait que retourner des mixed types depuis une fonction PHP soit une mauvaise pratique. Faisons donc un petit topo.

Tout d'abord répondons clairement... oui c'est une mauvaise pratique. Même bien documentée, votre fonction voit sa maintenabilité et sa clarté réduite par ce type de comportement. Certes PHP est un language faiblement typé et permet ce type de comportement, mais il s'agit d'une pratique qui rend les choses plus complexes pour la lisibilité du code.

Une alternative est de faire comme de nombreuses fonctions PHP intégrées : retourner false ou -1 si jamais le traitement n'a pas eu lieu. Attention cependant dans le premier cas : si votre fonction retourne un entier, vous devez utilser le triple égal ' ===' pour éviter la confusion :

false == 0 // donc si votre fonction retourne 0, cela vaudra false
false !== 0 // donc si votre fonction retourne 0, qui n'est pas de type booléen, le traitement sera considéré comme réussi

Néanmoins, on est encore dans du mixed type, mais plus propre que de retourner des messages d'erreurs divers comme on voit parfois sur Internet...

Si on veut aller encore plus loin, pofitons pleinement des fonctionnalités de PHP : si votre fonction rate son traitement : jetez une Exception que le code appelant devra traiter. En faisant ici comme dans d'autres languages, vous serez... au propre.

Cependant, soyons honnête, le fait que PHP soit faiblement typé faisant partie son ADN, on peut "se permettre" les mixed types sur des petites fonctions. Mais dans ces cas là, respectons au moins cette règle : un seul return dans le code, sinon cela devient compliqué à lire!


Cet article vous a plu? Découvrez d'autres articles :


comments powered by Disqus