PHP Bonne Pratique : Typer ses paramètres

Il y a les pratiques qu’on apprend à l’école, celle qu’on prend par feignantise, celle qu’on adopte par habitude, que ce soit à force de le voir ou de faire des copier-coller systématiques. Avec le temps et l’expérience, force est de constater qu’on cherche des méthodologies et des syntaxes toujours plus clair. Malgré les tendances qui se distingues autour de chaque langage, on est souvent capable de déterminer en lisant du code, qui de notre équipe possède une telle syntaxe En C#, les puristes prendront l’habitude de faire commencer toutes leurs interfaces par un « I » par exemple.

PHP, un syntaxe libre… trop libre ?

J’ai moi-même plusieurs habitudes qui me permettent de construire mon code d’une manière régulière. Cela dans le but de facilement m’y retrouver, de rapidement travailler, mais également faciliter le débogage et la lecture de mon code pour mes collègues.

Typer ses paramètres, pour quoi faire ? Et pourquoi est-ce une bonne pratique ?

En PHP, la syntaxe est très libre. J’entends très libre par le fait que le langage n’est pas très verbeux. Sans être un partisan des langages comme le Java par exemple, je pense que typer ses paramètres ne peut que nous aider dans notre travail.

Pourquoi perdre du temps à écrire le type de la donnée ?
En effet, mais comparons immédiatement les avantages et les inconvénients.

Dans les contres, sans être de mauvaises fois, j’aurai du mal à citer un autre argument que celui que j’ai écrit ci-dessus.

Dans les pour, je pourrai en énoncer une petite liste :

  1. Cela m’aide à construire mon code. Dans mon prototype (déclaration de ma fonction), je sais que tel ou tel argument doit être un array ou int.
  2. Cela me permet de déboguer plus rapidement. Si vous avez déclaré que vous vouliez un argument de type User dans votre méthode, PHP s’attendra à une instance User. Or, essayer de donner un array ou tout autre type différent de celui stipulé , fera immédiatement stopper PHP. Certes l’erreur risque d’être assez « hard », mais toute la suite de votre développement ne risque pas d’avoir de défaillance.
  3. Mes collègues aiment lire mon code comme un livre. En effet, lorsqu’on sait que la méthode setItem(…) prend un argument de type Foo, ça aide. Non ?
    1
    2
    function setItem($item);
    function setItem(Foo $item);

Certes, cette liste ne contient que 3 points, mais notre travail nous obligeant à toujours être sur le pied de guerre et à toujours explorer de nouvelles pistes, je vous conseille d’essayer et de constater par vous-même.

Une problématique en suspend avec le type mixed

En effet, je dois tout de même avouer une faiblesse, le type mixed. Type horrible et à bannir. Pour ceux qui ont codés en C/C++, c’est comme déclarer un pointeur d’instance avec un (void *).

Je vous conseille au maximum de ne pas vous servir de ce type et de limiter son utilisation. Un exemple ?
Le méthode setPoireau(mixed $poireau) prend des poirreaux en paramètres mais puisqu’elle n’est pas typée, vous pouvez également lui donner un bébé phoque… Problématique.

Si vous vouliez obliger à avoir des poirreaux, vous savez ce qu’il vous reste à faire, et admettons que vous ayez l’esprit tordu, et que vous voudriez pouvoir donner des légumes, je vous invite à utiliser une interface (ou une classe abstraite) et définir votre méthode comme cela.

1
function setPoireau(ILegume $poireau);

Je conviendrai que cet exemple n’est peut-être pas le meilleure qui soit mais il a le mérite d’être clair.

Conclusion

Le typage n’est pas obligatoire , mais reste à disposition de tout ceux que veulent travailler clairement et proprement. Je vous le recommande fortement.

Peut-être aurons-nous le droit, un jour, de typer le retour d’une méthode pour nous aider dans notre quête d’une sémantique toujours meilleure.