Précédent   Forum du club des développeurs et IT Pro > PHP > Langage > Syntaxe
Syntaxe Forum d'entraide sur la syntaxe de PHP et la POO. Avant de poster -> FAQ syntaxe, Cours d'initiation et cours de POO
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 28/04/2008, 22h14   #1
RideKick
Rédacteur
 
Avatar de RideKick
 
Homme
Directeur technique
Inscription : septembre 2006
Messages : 5 959
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Directeur technique
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : septembre 2006
Messages : 5 959
Points : 13 031
Points : 13 031
Par défaut Êtes-vous pour ou contre les "strict type hints" ?

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 :
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 :
echo htmlspecialchars((string)$var, ENT_QUOTES);
À la longue, cela risque d'être très fatigant...
Code :
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 :
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
__________________
Pas de questions techniques en MP please

Mon site perso
RideKick est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/04/2008, 00h36   #2
Phelim
Membre expérimenté
 
Homme
Inscription : août 2006
Messages : 316
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 28
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Secteur : High Tech - Électronique et micro-électronique

Informations forums :
Inscription : août 2006
Messages : 316
Points : 507
Points : 507
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 :
  • API plus solide
  • Erreur ou exception ayant plus de chance d'apparaitre relative au typage durant le developement
Les points faible :
  • Ennuyeux a la longue
  • Erreur non habituel pour les concepteurs de PHP

Point fort de la deuxieme:
  • Invisible pour le developeur
Point faible :
  • Effet de bord possible a cause du changement de type
  • Aucune evolution par rapport a l'usage actuel de PHP

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.
Phelim est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/04/2008, 09h56   #3
neissa
Invité régulier
 
Inscription : septembre 2006
Messages : 6
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 6
Points : 7
Points : 7
Code :
1
2
3
4
 
$var_1 = '1';
$var_2 = 1;
echo $var_1 == $var_2 ? 'égaux' : 'différents'; //affiche "égaux"
Oki cependant
Code :
1
2
 
echo $var_1 === $var_2 ? 'égaux' : 'différents';  //affiche "différents"
Pour les adèpte du typage fort rajoutez un =

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 !
neissa est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 29/04/2008, 10h41   #4
grunk
Modérateur
 
Avatar de grunk
 
Homme Olivier
Développeur Web
Inscription : août 2003
Messages : 2 499
Détails du profil
Informations personnelles :
Nom : Homme Olivier
Âge : 28
Localisation : France, Côte d'Or (Bourgogne)

Informations professionnelles :
Activité : Développeur Web
Secteur : Industrie

Informations forums :
Inscription : août 2003
Messages : 2 499
Points : 5 209
Points : 5 209
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.
grunk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/04/2008, 12h32   #5
doctorrock
Rédacteur
 
Avatar de doctorrock
 
Homme Julien Pauli
Architecte de système d'information
Inscription : mai 2006
Messages : 603
Détails du profil
Informations personnelles :
Nom : Homme Julien Pauli
Âge : 30
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Architecte de système d'information
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : mai 2006
Messages : 603
Points : 3 926
Points : 3 926
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 :
1
2
<?php
function ma_fonction (string $texte, int $nombre, float $prix) { }
je serai ravi.
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 :
1
2
$int = new SPLInt(8);
$flt = new SPLFloat(4.9);
Voyez ici pour les curieux


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.
__________________
.: Expert contributeur certifié PHP/ZF :.
Mes articles - Twitter - GitHub
doctorrock est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 29/04/2008, 12h38   #6
Yogui
Rédacteur
 
Avatar de Yogui
 
Homme Guillaume Rossolini
Directeur technique
Inscription : février 2004
Messages : 13 722
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Rossolini
Localisation : France

Informations professionnelles :
Activité : Directeur technique

Informations forums :
Inscription : février 2004
Messages : 13 722
Points : 28 861
Points : 28 861
Selon toi, si j'appelle ce code, que se passe-t-il ?
Code :
1
2
3
<?php
function ma_fonction (string $texte, int $nombre, float $prix) { }
ma_fonction (1, '2', 1.0);
Il me semblerait logique ou souhaitable que PHP convertisse 1 en chaîne (puisque compatible) et 2 en entier (puisque compatible), mais ne lance pas d'erreur.
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework)
Ressources PHP - Ressources Zend Framework
Yogui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/04/2008, 12h51   #7
SphynXz
Membre expérimenté
 
Avatar de SphynXz
 
Développeur Web
Inscription : mars 2008
Messages : 439
Détails du profil
Informations personnelles :
Âge : 27

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : mars 2008
Messages : 439
Points : 518
Points : 518
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
SphynXz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/04/2008, 12h53   #8
Er3van
Modérateur
 
Avatar de Er3van
 
Homme Clément Lehalle
Architecte Logiciel
Inscription : avril 2008
Messages : 1 426
Détails du profil
Informations personnelles :
Nom : Homme Clément Lehalle
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Architecte Logiciel
Secteur : Industrie

Informations forums :
Inscription : avril 2008
Messages : 1 426
Points : 2 377
Points : 2 377
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 --
Er3van est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/04/2008, 15h39   #9
kaymak
Membre Expert
 
Inscription : janvier 2007
Messages : 1 452
Détails du profil
Informations personnelles :
Âge : 28
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : janvier 2007
Messages : 1 452
Points : 1 914
Points : 1 914
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....
kaymak est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/04/2008, 20h00   #10
fred_avignon
Invité régulier
 
Inscription : novembre 2006
Messages : 7
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 7
Points : 8
Points : 8
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é.
fred_avignon est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/04/2008, 20h17   #11
fred_avignon
Invité régulier
 
Inscription : novembre 2006
Messages : 7
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 7
Points : 8
Points : 8
Citation:
Envoyé par doctorrock Voir le message
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.
Les bons développeurs ne représentent qu'un petite proportion des développeurs. Les autres utilisent plus ou moins bien les conversions de types sans connaître les exceptions et cas particuliers. C'est source de beaucoup d'erreurs.
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.
fred_avignon est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/04/2008, 11h23   #12
MikaMTB31
Invité de passage
 
Inscription : mars 2008
Messages : 1
Détails du profil
Informations forums :
Inscription : mars 2008
Messages : 1
Points : 1
Points : 1
Citation:
Envoyé par doctorrock Voir le message
Si je pouvais avoir une structure du type
Code :
1
2
<?php
function ma_fonction (string $texte, int $nombre, float $prix) { }
je serai ravi.
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 ?
J'achète. Cette simple modif satisfairait les gens qui s'inquiètent de monter des API sûres, et les autres qui veulent 'ne pas se prendre la tête' en écrivant leur code. Je pense qu'on aura du mal à faire mieux.

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.
MikaMTB31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/04/2008, 11h44   #13
Yogui
Rédacteur
 
Avatar de Yogui
 
Homme Guillaume Rossolini
Directeur technique
Inscription : février 2004
Messages : 13 722
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Rossolini
Localisation : France

Informations professionnelles :
Activité : Directeur technique

Informations forums :
Inscription : février 2004
Messages : 13 722
Points : 28 861
Points : 28 861
Citation:
Envoyé par Er3van Voir le message
Suite à la remarque de Yogui me vient un doute, est-ce que PHP implémente le surtypage des fonctions ??
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
Yogui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/04/2008, 13h20   #14
Phelim
Membre expérimenté
 
Homme
Inscription : août 2006
Messages : 316
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 28
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Secteur : High Tech - Électronique et micro-électronique

Informations forums :
Inscription : août 2006
Messages : 316
Points : 507
Points : 507
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 ) par exemple comme le typage faible de php

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

}
Ca c'est bien.
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
Phelim est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/05/2008, 11h12   #15
savageman86
Membre actif
 
Avatar de savageman86
 
Inscription : octobre 2006
Messages : 104
Détails du profil
Informations personnelles :
Âge : 26
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : octobre 2006
Messages : 104
Points : 185
Points : 185
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
savageman86 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/05/2008, 13h53   #16
BobLunique
Membre du Club
 
Inscription : octobre 2007
Messages : 66
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 66
Points : 49
Points : 49
A toujours suivre les autres on reste toujours derriere ( PHP qui "cours" apres les langages typés me déplait ... )

Citation:
Envoyé par savageman86
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
BobLunique est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/05/2008, 12h37   #17
Yogui
Rédacteur
 
Avatar de Yogui
 
Homme Guillaume Rossolini
Directeur technique
Inscription : février 2004
Messages : 13 722
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Rossolini
Localisation : France

Informations professionnelles :
Activité : Directeur technique

Informations forums :
Inscription : février 2004
Messages : 13 722
Points : 28 861
Points : 28 861
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 :
1
2
3
<?php
function ma_fonction (string $texte, int $nombre, float $prix) { }
ma_fonction (1, '2', 1.0);
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework)
Ressources PHP - Ressources Zend Framework
Yogui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/06/2008, 15h24   #18
meliandah
Membre confirmé
 
Inscription : mai 2006
Messages : 196
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 196
Points : 278
Points : 278
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 :
1
2
3
4
5
6
 
//Type mixed par défaut
function test( $a, $b ) {}
function test(int $a, int $b){}
function test(float $a, float $b){}
//Serais enfin 3 fonctions différentes
meliandah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/08/2008, 09h56   #19
Julien Breux
Invité régulier
 
Inscription : janvier 2008
Messages : 7
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 7
Points : 7
Points : 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 :
1
2
3
$id = $_GET['id'];
 
function displayAuthorName(int $id){...}
(avec un typage fort)
Julien Breux est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/08/2008, 10h30   #20
Yogui
Rédacteur
 
Avatar de Yogui
 
Homme Guillaume Rossolini
Directeur technique
Inscription : février 2004
Messages : 13 722
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Rossolini
Localisation : France

Informations professionnelles :
Activité : Directeur technique

Informations forums :
Inscription : février 2004
Messages : 13 722
Points : 28 861
Points : 28 861
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 :
1
2
3
$id = (int)$_GET['id'];
// ...
displayAuthorName((int)$id);
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework)
Ressources PHP - Ressources Zend Framework
Yogui est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 17h28.


 
 
 
 
Partenaires

Hébergement Web