Salut
Depuis quelque temps sur la liste interne de discussion du PHP Group, Internals, un débat fait rage autour des "type hints".
Comme vous le savez, PHP est un langage à typage faible. Cela signifie que l'on peut écrire :
La comparaison se passe sans problème et le résultat est même positif. C'est ce que l'on appele le "type juggling", très utile dans de nombreuses situations puisque les données en provenance de bases de données et des navigateurs Web sont généralement au format texte.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 $var_1 = '1'; $var_2 = 1; echo $var_1 == $var_2 ? 'égaux' : 'différents'; //affiche "égaux"
Certaines personnes aimeraient pourtant retrouver une syntaxe proche du C avec un typage fort, voire strict. Cela se ferait à deux niveaux :Il existe plusieurs approches.
- Pour les paramètres des fonctions ;
- Pour les valeurs de retour des fonctions.
Un typage "fort" obligerait tous les développeurs utilisant une API à convertir les valeurs avant d'appeler les fonctions de l'API :
À la longue, cela risque d'être très fatigant...
Code : Sélectionner tout - Visualiser dans une fenêtre à part echo htmlspecialchars((string)$var, ENT_QUOTES);
Une autre approche consiste à laisser un typage faible, mais à obliger une conversion automatique dans le type indiqué :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 function speak(int $number) { var_dump($number); } speak('1'); //erreur de type
À mon sens, cette dernière proposition est assez alléchante. Si autoriser un typage fort est prévu pour PHP, j'aimerais autant qu'il ne soit pas totalement "strict".
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 function speak(int $number) { var_dump($number); } speak('1'); //affiche "1" après conversion en entier
Par ailleurs, un typage strict ferait double emploi avec :
- Le parseur PHP (erreurs d'analyse du code source par le Zend Engine) ;
- Certaines fonctions historiques très utiles comme sprintf(), qui font un très bon usage du type juggling.
La même proposition vaut pour les types de retour des fonctions.
Qu'en dites-vous ?
cf. http://blog.developpez.com/index.php...&p=5546&more=1
Partager