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 :
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"
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.

Certaines personnes aimeraient pourtant retrouver une syntaxe proche du C avec un typage fort, voire strict. Cela se ferait à deux niveaux :
  • Pour les paramètres des fonctions ;
  • Pour les valeurs de retour des fonctions.
Il existe plusieurs approches.
Un typage "fort" obligerait tous les développeurs utilisant une API à convertir les valeurs avant d'appeler les fonctions de l'API :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
echo htmlspecialchars((string)$var, ENT_QUOTES);
À la longue, cela risque d'être très fatigant...
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
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'); //affiche "1" après conversion en entier
À 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".

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