
Vous avez récemment découvert mon histoire d’un curieux recrutement. J’y montrais alors une portion de code PHP exemptée de bonne pratique et fourmillant d’erreurs. This might sound more complicated than playing online casino (http://www.casino.com/fr/) at first but you will soon get your head around it. Voici donc la « correction » que je vous propose, recensant les points que j’aurais aimé voir soulevés par les candidats :
- Le tag <?php dans sa version courte
- Un code intégralement en français.
- Pas de commentaires multi-lignes en entête de fonction
- Pas de tags pour la génération de documentation (phpDoc, Doxygen…)
- Pas de typage pour le paramètre $voiture (en tant qu’objet, autant bénéficier du typage apporté par PHP)
- Commentaires inutiles dans le code (lignes 8 et 13)
- Mauvaise indentation
- Problème de type pour $max
- If/else à problème
- L’opérateur de comparaison pourrait être poussé à « ===«
- Lorsque que $max vaut « inconnu », on pourrait préférer une constante
- Pas d’utilisation d’ORM, utilisation de mysql_query natif
- Requête SQL peu lisible (mots clés en minuscules, une seule ligne…)
- Problèmes dans la requête SQL (guillemets mal placés, le SET est après le WHERE)
- Pas de protection de la requête
- return est un mot clé, pas une fonction : on devrait omettre les parenthèses.
- Il vaut mieux éviter d’insérer les tags de fermeture PHP
- Vu ce que fait la fonction, ça serait sûrement mieux d’en faire une méthode au sein de la classe (mais l’analyse de ce que fait la fonction n’était pas demandé)
Bravo à tous ceux qui avaient farfouillé ! Sans forcément trouver exactement tous ces points, il était sûrement aisé d’en identifier au moins 4 ou 5. Attention, ce ne sont pas forcément des erreurs, mais des points qui pourraient être discutés (les commentaires pourraient très bien être en français pour telle ou telle raison, par exemple)
Abonnement Fil RSS
4 ou 5… t’es gentil
Tu me rassures !!
Il faut que ca reste entre nous mais moi j’en avais trouve 7…(non serieux j’y comprends rien mais j’ai bien rigole en lisant l’entretien d’embauche)
C’est une excellente idée ce code (il est vraiment horrible
)
Je pense qu’il y a d’autres points discutables : le nom de la fonction et son commentaire (on ne parle de BDD nulle part), la requête n’a rien à faire là (et son retour n’est pas testé).
)
Aussi, pour ce genre de test, je préfère passer par un tableau (une propriété en protected dans la classe) (par contre, je développe en frenglish
2 => Il y a des entreprises qui encouragent à un code en français. Personnellement, je n’aime pas. Mais on peux difficilement élever ça à une « mauvaise pratique ».
3,4 => Ah oui, le nombre de jeunes programmeurs qui ne connaissent ni Doxygen ni PHPDoc !…
6 => Mouais, sujet à discussion. Habituellement, on considère que la documentation au-dessus de la fonction doit expliquer ce que fait cette fonction (et non comment elle le fait). Par contre, expliquer à l’intérieur comment l’algorithme a été pensé, c’est une bonne chose. Je suis d’accord que dans ton exemple les commentaires sont inutiles ; mais là encore, c’est difficile de dire que les commentaires dans le code sont une mauvaise pratique.
11 => Ou bien on pourrait retourner NULL. Ou lever une exception…
12 => Un ORM mal utilisé (surtout par de jeunes développeurs) est bien pire que l’utilisation demysql_query directe. Bon, le minimum serait de passer par une librairie d’abstraction. Mais dans le cadre de ton test, avec juste un bout de code sorti de tout contexte, c’est difficile de leur en vouloir.
16 => L’argument n’est pas valable. « if » est un mot-clé du langage, et il a besoin de parenthèses. Là on est dans le domaine de la norme de codage, ça revient à discuter des goûts et des couleurs.
17 => Argument très discutable. C’est sûr que pour les développeurs étourdis, ça évite d’avoir des espaces qui s’ajoutent sur la sortie standard. Mais ça reste globalement malpropre, et pourrait poser des problèmes avec certains compilateurs PHP.
18 => Vu les problèmes de logique (intentionnels, je sais) de cette fonction, elle mériterait surtout d’être effacée !
Salut Amaury !
D’une manière générale, je ne parlais pas forcément de mauvaises pratiques, mais juste de « points discutables », qui méritent d’être formalisés dans une entreprise, si ce n’est au niveau d’une communauté entière.
Pour le return, cependant, je suis moins mitigé que toi ! Je me base sur les dires du manuel : http://php.net/manual/fr/function.return.php
À bientôt !
C’est une excellente idée ce code (il est vraiment horrible
)
Je pense qu’il y a d’autres points discutables : le nom de la fonction et son commentaire (on ne parle de BDD nulle part), la requête n’a rien à faire là (et son retour n’est pas testé).
)
Aussi, pour ce genre de test, je préfère passer par un tableau (une propriété en protected dans la classe) (par contre, je développe en frenglish