|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 | ||||||
![]() ![]() Directeur technique Inscription : septembre 2006 Messages : 5 959 ![]() |
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 :
Certaines personnes aimeraient pourtant retrouver une syntaxe proche du C avec un typage fort, voire strict. Cela se ferait à deux niveaux :
Un typage "fort" obligerait tous les développeurs utilisant une API à convertir les valeurs avant d'appeler les fonctions de l'API : Code :
echo htmlspecialchars((string)$var, ENT_QUOTES); Code :
Code :
Par ailleurs, un typage strict ferait double emploi avec :
Qu'en dites-vous ? cf. http://blog.developpez.com/index.php...&p=5546&more=1 |
||||||
|
|
00
|
|
|
#2 |
|
Membre expérimenté
![]() ![]() Inscription : août 2006 Messages : 316 ![]() |
Il est vrai que dans un sens, la solution de la conversion obligatoire est interessante pour fiabiliser d'une application.
Voici les points forts que je vois pour la premiere methode :
Point fort de la deuxieme:
Je ne suis pas forcément pour la premiere methode. La deuxieme est plus problématique car elle rajoute une couche qui au final sert un peu à rien. On est au meme point que php aujourd'hui. La conversion se fait a l'entrée de la fonction au lieu du moment ou l'en en a besoin. Je comprends tout a fait que pour un usage professionnel (en fait quand on dit ça, ça a plutot le sens pour assurer une application de production aussi proche que possible de ce que le developpeur developpe), un typage fort est plus interessant. PHP avec un typage fort batard comme mentionné (premiere et deuxieme methode), je trouve que c'est un retour en arriere. Soit on fait un véritable typage fort (comme en C) soit un typage faible (comme actuellement). Mais je ne suis pas adepte du entre les 2. |
|
|
00
|
|
|
#3 | ||||
|
Invité régulier
![]() Inscription : septembre 2006 Messages : 6 ![]() |
Code :
Code :
Le typage des variables ne fiabilise en rien une application ça donne juste une impression de sécurité au développeur qui en fait n'est que du vent. De plus les sprintf sont une horreur pour les performance d'un API, le PHP ( 5 et inférieur ) n'as pas la chance d'être précompilé nativement donc les perfomances de celui-ci sont pas jolies jolies, vivement PHP6 mais non au typage fort ! La meilleur des solutions est de ne pas copier d'autre langage qui sont très utilisé mais loin d'être des exemples. Que vive le typage faible ! |
||||
|
|
10
|
|
|
#4 |
![]() ![]() Olivier Développeur Web Inscription : août 2003 Messages : 2 499 ![]() |
Je suis assez d'accord avec neissa. Le typage faible de php est a mon sens un énorme avantage et surtout un gain de temps non négligeable.
Moi qui est l'occasion de faire quelques petits développement en C ou en Java , je trouve le typage très pénible. Je suis bien d'accord qu'il est important sur un gros projet C/JAVA/embarqué d'optimiser la mémoire et donc de bien choisir ces types mais pour du web je vois pas l'intérêt. On sera de toute manière limité par la performance globale du langage avant d'être ennuyer par des souçis lié au typage (à mon avis). Et encore une fois comme le précise neissa , si le type vient à avoir son importance dans une appli , on à de quoi le vérifier. Conclusion je plussois le typage faible également
__________________
Pry Framework php5 | Recherche CDI dev. Web sur Dijon et alentours. |
|
00
|
|
|
#5 | ||||
![]() ![]() Julien PauliArchitecte de système d'information Inscription : mai 2006 Messages : 603 ![]() |
Mon avis : je ne suis pas pour un typage fort, mais un typage strict des fonctions et/ou méthodes.
Ca aide énormément dans le cadre de développement de bibliothèques orientées objets et de framework. Si je pouvais avoir une structure du type Code :
Il est déja possible de typer sur des objets (ou des interfaces) et des tableaux, pourquoi ne pas étendre ces possibilité à tous les autres types PHP ? Ca nous aiderait bien dans le cadre du développement de ZendFramework, par exemple ( ou de tout autre outils ) Il existe des extensions déja, notamment dans la SPL, pour typer des floats ou des int, avec Code :
Pour le typage fort, je suis contre. Un bon développeur connait par coeur les règles de convertion de types de PHP, et les utilise à bon escient : c'est tout simplement profiter d'une fléxibilité du langage, il ne faut pas l'enlever. |
||||
|
10
|
|
|
#6 | ||
![]() ![]() Guillaume RossoliniDirecteur technique Inscription : février 2004 Messages : 13 722 ![]() |
Selon toi, si j'appelle ce code, que se passe-t-il ?
Code :
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework) Ressources PHP - Ressources Zend Framework |
||
|
|
00
|
|
|
#7 |
|
Membre expérimenté
![]() Développeur Web Inscription : mars 2008 Messages : 439 ![]() |
je pense que le problème ici est de demander à php d'être stricte et souple en même temps.
Pour ton exemple Yogui, je prefère nettement que PHP m'avertisse d'une erreur de passage d'argument. quoique si ce que j'attend est un int, et que je récupère un int qui entre temps à été converti en string par je ne sais quel étape du code (récupération bdd...), là ca peut devenir intéréssant. PS : parle-t-on du futur de php??? parce qu'il me semblait que le type hinting ne fonctionnait que pour les classes et les tableaux?
__________________
I don't know what will be used in the next world war, but the 4th will be fought with stones. - Albert Einstein Pour détourner un avion, il faut monter dedans - Frédéric beigbeder |
|
|
00
|
|
|
#8 |
![]() ![]() Clément LehalleArchitecte Logiciel Inscription : avril 2008 Messages : 1 426 ![]() |
Suite à la remarque de Yogui me vient un doute, est-ce que PHP implémente le surtypage des fonctions ??
Si oui, alors un typage strict des fonctions peut effectivement s'avérer pratique. Dans le cas contraire, comment gérer les types en entrée d'une fonction ? Pour revenir à la discussion principale, je reste partagé. D'un côté, habitué à développer en java, C, C++, le typage fort et stricte est devenu habituel et logique. Ca permet à mes yeux d'avoir une meilleure cohérence d'ensemble. Cependant, le langage faiblement typé qu'est PHP apporte pas mal d'avantage, dont une certaine souplesse et de temps appréciable. Pour les retours de fonction c'est d'ailleurs particulièrement utile de pouvoir retourner, selon le contexte, un tableau, un binaire ou un entier....
__________________
One minute was enough, Tyler said, a person had to work hard for it, but a minute of perfection was worth the effort. A moment was the most you could ever expect from perfection. -- Chuck Palahniuk, Fight Club, Chapter 3 -- |
|
|
00
|
|
|
#9 |
|
Membre Expert
![]() Inscription : janvier 2007 Messages : 1 452 ![]() |
Pour.
Le typage avec conversion automatique des types scalaires. Avec la possibilité de choisir de ne pas déclarer les types en entrées/sorties. Comme cela il ne sera plus nécessaire de re typer des arguments en entrées genre : $t = (int)$t; ...... Argument de fainéant ? Juste un peu Mais bon en même temps on utilise le typage en entrée / sortie partout, en PHP comme ailleurs. Lors de la rédaction des docs, lors de l'utilisation d'une fonction/méthode, lors de l'écriture de la-dite fonction/méthode, alors pourquoi laisser cette information se volatiliser et se perdre dans un espace purement informatif de documentation.... |
|
|
00
|
|
|
#10 |
|
Invité régulier
![]() Inscription : novembre 2006 Messages : 7 ![]() |
Bonjour.
Alors moi je suis pour un typage fort. J'ai fait du Java, du c++, du PHP et ma conclusion est sans appel : plus le typage est fort moins il y a de risques de bugs. J'ai l'habitude de faire de la programmation défensive et je fait vérifier le maximum de choses par le compilateur. En PHP, le typage "lâche" est une plaie car certains transtypages se font de manière invisible et génèrent des bugs très difficiles à trouver. Mes années d'expériences me prouvent que l'apparente facilité de l'absence de typage est un leurre. Le temps soit-disant gagné à l'écriture se perd lors du débuggage. Dans tout langage, il faut absolument éviter tout ce qui se fait de façon implicite, sans que le développeur l'ai explicitement demandé. |
|
|
00
|
|
|
#11 | |
|
Invité régulier
![]() Inscription : novembre 2006 Messages : 7 ![]() |
Citation:
Même moi après plusieurs années de PHP je suis parfois surpris du comportement de PHP et je peste contre l'absence de règles constantes. C'est pourquoi je m'impose de renoncer aux conversions de types automatique en refusant dans mes fonctions les types non souhaités. Exemple : function x($machaine) { if (!is_string($machaine))}throw new exception;// ... traitement Avouez que ça rajoute du travail en plus pour rien. Et si je veux absolument passer un integer à ma fonction : $i = 1; x((int)$i); Cette technique me garantie de savoir précisément ce que je passe. |
|
|
|
00
|
|
|
#12 | |||
|
Invité de passage
![]() Inscription : mars 2008 Messages : 1 ![]() |
Citation:
Pour répondre à Yogui, pour moi, l'interpréteur doit planter sur cet exemple si les types des donnees passees sont mauvais. C'est à ça que sert la spécification des types. Si on veut la souplesse, on ne met rien. |
|||
|
|
00
|
|
|
#13 |
![]() ![]() Guillaume RossoliniDirecteur technique Inscription : février 2004 Messages : 13 722 ![]() |
En partie avec l'héritage, mais de base non PHP n'a pas de surcharge de fonctions à la manière de C ou Java. La raison est simple : la signature d'une fonction PHP est son nom, tandis que la signature d'une fonction C ou Java est son nom + son type de retour + le type de chacun de ses paramètres (ce que personnellement je trouve très confus).
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework) Ressources PHP - Ressources Zend Framework |
|
|
00
|
|
|
#14 | |
|
Membre expérimenté
![]() ![]() Inscription : août 2006 Messages : 316 ![]() |
Confus, je trouve qu'au contraire c'est pas plus mal.
Ca permet de gérer le polymorphisme. Ainsi, on peut gérer la difference dans une meme fonction de maniere elegante si c'est un tableau, un int ou un string. Apres ça ouvre aussi la porte à beaucoup d'abus (comme des qu'on laisse des libertés Citation:
Quand on crée une API, ce genre de chose est facile a faire. Une api c'est souvent apporter des possibilités à ceux qui ne sont pas capables de les utiliser (genre generer un fichier pdf ac quelques lignes de code) Si l'auteur juge qu'il doit controler ces données d'entrée, rien ne l'empeche de le faire. Apres, on parle de sécurité, de developpement industrialisé. Seulement il y'a des personnes qui s'en foutent et ça peut se comprendre. La seule chose qu'il veule c'est créer un script php facilement sans se prendre la tete. Bon faut etre honnete, sur php, il y'en a de moins en moins. Sans rentrer dans un débat, les personnes que je cotoyais qui programmait en php et qui ont arreté, l'ont fait a cause de la POO. Pourtant la POO c'est super. Mais ce n'est pas ce que ces personnes recherchaient pour faire du php. Un typage fort, on en perdra peut etre moins en route mais pour PHP, c'est une marche de plus vers la professionnalisation du language (ce qui a son interet aussi) Donc je redonne mon avis : neutre |
|
|
|
00
|
|
|
#15 |
|
Membre actif
![]() ![]() Inscription : octobre 2006 Messages : 104 ![]() |
La Core Team de PHP n'a pas dans l'intention d'introduire un typage fort car c'est en (grande) partie grâce à ça que le langage est si simple à prendre en main.
Ceci dit, je suis totalement pour qu'un typage soit introduit dans les définitions des fonctions, à la manière des objets et array en PHP 5, et ce même pour les types de base (string, int, float, bool, etc...), qui à pouvoir spécifier mixed lorsqu'on s'en fout (où plutôt avoir mixed comme valeur "par défaut", comme actuellement). +1 pour doctorrock donc |
|
|
00
|
|
|
#16 | |
|
Membre du Club
![]() Inscription : octobre 2007 Messages : 66 ![]() |
A toujours suivre les autres on reste toujours derriere
Citation:
|
|
|
|
00
|
|
|
#17 | ||
![]() ![]() Guillaume RossoliniDirecteur technique Inscription : février 2004 Messages : 13 722 ![]() |
Pour rappel, PHP travaille constamment avec des données au format texte (XML, SGBD, formulaires...), ce qui est la raison principale pour le succès du type juggling (typage dynamique). C'est ce qui fait, à mes yeux comme aux yeux de certains développeurs du PHP Group, l'absurdité des type hints tricts en PHP.
Je comprends qu'un langage de programmation bas niveau (C, C++) aie l'utilité d'un tel contrôle puisqu'ils permettent au programmeur de manipuler très précisément la mémoire utilisée par son programme. Cependant, PHP est une forme de langage managé, ce n'est pas le code PHP lui-même mais le Zend Engine qui alloue et libère la mémoire système nécessaire à ses variables. Par conséquent, un typage fort en PHP n'a aucun sens. Sans compter qu'une variable peut de toute manière changer de type au cours de l'exécution de la fonction, ce qui confirme mon sentiment d'absurdité par rapport au typage strict. Pour moi, c'est clair : le typage strict n'est pas prévu pour PHP. Par contre, je ne change pas d'avis, le code suivant me semble parfaitement acceptable si le typage est vu comme "conversion forcée" plutôt que "typage forcé" : Code :
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework) Ressources PHP - Ressources Zend Framework |
||
|
|
00
|
|
|
#18 | ||
|
Membre confirmé
![]() ![]() Inscription : mai 2006 Messages : 196 ![]() |
Personnellement je reste toujours rigoureux avec mes variables lorsque je programme en PHP et j'essai de toujours garder le même type pour une variable sans que cela soit préciser, mais le fait de pouvoir mettre un typage fort avec un type mixed par défaut, sans l'auto-conversion, serait très bien pour 3 cas :
Cas mineur : Lorsque l'ont indique un type secondaire (Classe principalement), on pourrais posséder l'intellisense pour le choix des fonctions et variables de classes non-native à PHP dans les IDE. Cas moyen : On pourrais enfin générer des fichiers de classes PHP grâce à l'UML qui marcherait directement avec le typage inscrit, sans avoir a tout modifier derriere Cas majeur : Permettre une surcharge (dynamique) des méthodes des classes en PHP (bye bye la fonction call_user_method Code :
|
||
|
|
00
|
|
|
#19 | ||
|
Invité régulier
![]() Inscription : janvier 2008 Messages : 7 ![]() |
Moi je pense que le typage faible fait la force de ce nouveau langage.
De plus, les variables extérieures sont retournées comme chaîne de caractères... Donc difficile de faire: Code :
|
||
|
|
00
|
|
|
#20 | ||
![]() ![]() Guillaume RossoliniDirecteur technique Inscription : février 2004 Messages : 13 722 ![]() |
Justement, l'idée du typage fort est d'obliger le développeur qui utilise une API à forcer le type de ses variables. Puisque PHP a un typage faible, le type de la variable peut changer à tout moment, il faut donc "caster" à chaque utilisation de l'API :
Code :
function displayAuthorName(int $id){...} Code :
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework) Ressources PHP - Ressources Zend Framework |
||
|
|
00
|
Copyright © 2000-2013 - www.developpez.com