Votre avis sur une question de php

[quote]Soit $emailAdresses un tableau composé de chaines de caractères représentant des adresses e-mail. Que fait le code suivant:
function a($a, $b, $c){echo $c[1]($c[0]($a, $c[2])."<$c[3] />", 1);}
array_walk($emailAdresses, ‘a’, array(‘strstr’, ‘substr’, ‘@’, ‘br’));[/quote]

C’est une question se trouvant dans un test de recrutement sur papier.
J’aimerais avoir l’avis de geeks compétents en php sur la difficulté (ou l’impossibilité) de cette question: est-ce que quelqu’un avec un niveau purement scolaire (bac +2 ou +5) devrait pouvoir trouver la réponse? et quelqu’un avec quelques années d’expérience en php? et quelqu’un ne maitrisant pas forcément le php mais ayant de bonne capacités de reflexion?

Pour moi (3ans XP en dev mais sans avoir touché au PHP), ce code est incompréhensible.

Je trouve qu’il serait plus judicieux de tester les capacités de réflexions sur des problèmes de logiques, plutôt que sur le déchiffrage d’un code aussi obscure, mais bon, c’est juste une question de point de vue.

J’ai 1 an et demi de PHP, bas +5 et je pige rien à ce code.
Comme ZGoblin, je ne vois pas l interet d’un tel test. Savoir pondre ou comprendre un code tordu, non commenté et mal écrit (coder une fonction sur une seule ligne), je ne vois pas ce que ça apporte.
La programmation c’est plutot savoir réfléchir, analyser et non etre capable de décoder du chinois, binaire, code tordu etc selon moi (ha ben en fait j’ai mis exactement la meme chose que ZGoblin). Moi on me pose cette question a un entretien, ben je serais content de le louper car j’aurais alors pas du tout le meme point de vue que le recruteur sur le métier.

Bon je vais quand meme plancher sur le code pour voir ce qu’il fait.

Je maitrise pas trop trop le php, du coup il m’a fallu la doc pour me rafraichir sur la fonction strstr. Pour menager ma suceptibilité je dirais que c’est un niveau ‘avancé’ :)) Du coup je ne considere pas ces notions comme indispensable pour un candidat, un nice-to-have comme on dit ?

Bon avec la doc de array_walk ça passe tout de suite mieux :slight_smile:
Si je me gourre pas, pour chaque adresse mail il renvoie ceci :

echo substr(strstr($adresse,'@')."<br />",1);

Donc il affiche juste ce qui est derriere le @ de chaque adresse mail en mettant un à la ligne html.

Après étude, le test est pas si con à condition d’avoir la doc sous les yeux. Il faut du coup analyser un code moisi et ça arrive souvent. Pour le faire sans doc faut être très fort je trouve.

Effectivement ça arrive souvent, mais dans ce cas, il faut mieux repartir de la documentation afin d’éviter les erreurs d’interprétation. C’est beaucoup moins risqué.

merci pour vos réponse, je m’attendais un peu à ça :slight_smile:

je précise que ce n’est absolument pas une question éliminatoire.

le but était de déterminer la capacité à tirer des conclusions des quelques indices disséminés dans un truc à priori imbitable.

un petit exemple du type de réflexion attendu:
au départ, on précise que la variable sur laquelle on travaille est un tableau d’adresses e-mail, donc des chaines de caractères de la forme ‹ nom@domaine.ext ›.
dans la fonction, il n’y a qu’une seule instruction qui est un ‹ echo ›.
sur la deuxieme ligne, on a un array_walk (même si on ne sait pas ce que ça fait exactement, on peut se douter que ça concerne les tableaux - d’ailleurs on lui passe le tableau d’adresses en premier paramètre).
plus loin, on voit substr (fonction qui retourne une sous-chaine d’une chaine passée en paramètre) et strstr (fonction qui cherche une chaine dans une autre chaine, et le cas échéant retourne la sous-chaine allant de la chaine recherchée jusqu’à la fin de la chaine dans laquelle on cherche)
le paramètre suivant étant un @. que l’on trouve au milieu des adresses e-mail.
en secouant un peu tout ça, on peut parvenir à la conclusion que l’on va découper les adresses e-mail au niveau de leur @.

bref, on attend pas la réponse exacte et complète (à savoir que ça affiche les noms de domaine des adresses suivis d’un
pour passer à la ligne), mais tout ou partie d’une procédure de réflexion dans ce genre, pour se faire une idée de la manière dont la personne va essayer de résoudre ce problème.

un autre début de réflexion, c’est qu’en voyant dans la première ligne un tableu $c comprenant 4 éléments, et dans la seconde ligne un tableau comprenant lui aussi 4 éléments, on peut se dire qu’il s’agit du même et essayer de remplacer les références à $c par les valeurs correspondantes, pour obtenir la ligne suivante tout de suite un peu plus compréhensible:
echo substr(strstr($a, ‹ @ ›)."
", 1);

Le problème c’est qu’effectivement une très grosse majorité de gens vont certainement abandonner l’idée même de chercher à comprendre, et repartir en se disant « de toute façon, il y a pas moyen que je bosse pour des connards capables de demander ça » ^^
donc on va certainement abandonner l’idée de poser ce genre de questions. Je pourrais plutôt l’envoyer à mes anciens profs, voir s’il y en a d’assez pervers pour la poser en examen ^^

Et moi qui pensais que l’on posait des questions tordues parfois en entretien…

La clairement, à part faire stresser encore plus ton candidat tu n’auras pas de résultat positif je pense.
En revanche en la transformant un peu, de façon à ce qu’elle soit un peu plus explicite, tu peux poser la question de l’optimisation.

[quote=“Rabban, post:1, topic: 46677”]C’est une question se trouvant dans un test de recrutement sur papier.
J’aimerais avoir l’avis de geeks compétents en php sur la difficulté (ou l’impossibilité) de cette question: est-ce que quelqu’un avec un niveau purement scolaire (bac +2 ou +5) devrait pouvoir trouver la réponse? et quelqu’un avec quelques années d’expérience en php? et quelqu’un ne maitrisant pas forcément le php mais ayant de bonne capacités de reflexion?[/quote]

Moi ce qui me choque le plus c’est la façon “goret” genre echo $variable CARACTERE $variable …
Sinon franchement c’est facile de voir que ça va faire " echo substr(strstr( ADRESSE, @ ) . “
”, 1) "

En se disant bien encore une fois que : [ul]
[li]les echo c’est du nimporte quoi[/li][li]foutre un breakline aux fesses de l’email ça me parait pas top, si c’est juste pour revenir à la ligne, faudrait plutôt le mettre apres le substr[/li][/ul]

Bref, avec quelques années de php dans les pates (disons 2 3) et en bac pas tout à fait +2 (où je fais vraiment pas ça en cours) c’est plutôt facile si on a 5 minutes pour y réfléchir : construire le echo, et voir ce que ça va faire.
Concretement, que le strstr retourne la chaine @domaine.tld et que le substr tronque le premier caractère (arobaze donc).
J’avoue que le
m’a beaucoup dérouté.

Par contre, si tu veux savoir si ton candidat est capable de comprendre (et donc de faire) de l’obfuscated code dans tes projets histoire de bien les rendre illisible, c’est une super methode…

:crying:

LoneWolf
putain array_walk, c’est quoi ce truc? :slight_smile:

ça lance une même fonction sur tous les membres d’un tableau. très pratique ^^

[quote=“LoneWolf, post:10, topic: 46677”]Par contre, si tu veux savoir si ton candidat est capable de comprendre (et donc de faire) de l’obfuscated code dans tes projets histoire de bien les rendre illisible, c’est une super methode…

:crying:

LoneWolf
putain array_walk, c’est quoi ce truc? :)[/quote]

array_walk c’est comme array_map.

Perso je m’en sers par exemple en tête de page, quand il faut faire du ménage donc je fais un array_walk($_POST, ‘conchita’); où conchita fait le ménage.

C’est con mais ça m’a fait rire pendant 5 minutes.