typage fort ?

typage fort ? - PHP - Programmation

Marsh Posté le 14-05-2008 à 18:02:49    

bonjour
 
dans le cadre d'une application PHP5, je cherche le moyen de typer fortement mes variables
au moyen de classes . Ca permettrait a la fois de manipuler la valeur à l'intérieur de l'objet
(donc quitter autant que possible le monde procédural)
mais aussi de typer la signature de mes méthodes.
 
En gros reprendre le principe de "Strong typing" qui existe deja en .Net
 
exemple :  
au lieu de faire : $myString = "bonjour"
faire : $myString = new String("bonjour" )
 
J'ai vu qu'il existe  
 
- la librairie PECL SPL_Types, mais la doc est quasi inexistante.
De plus comme c du PECL, c pas dit que j'aie le droit de compiler les fichiers C sur le serveur Web de prod !
 
- un ensemble de classes : http://www.phpclasses.org/browse/package/2044.html
mais ya que pour les string, c trop limité.
 
Des propositions ?
 
merci

Reply

Marsh Posté le 14-05-2008 à 18:02:49   

Reply

Marsh Posté le 14-05-2008 à 18:34:25    

Vouloir faire du typage fort avec php c'est peut être se tromper de langage...
 
Passé cet avis, je vois que tu as cherché, cherche encore doit bien y avoir des masos dans ton genre qui ont déjà pondu un truc du genre. Sinon je te proposerais bien de le faire toi même mais je suppose que c'est pas la réponse que tu attends :whistle:

Reply

Marsh Posté le 14-05-2008 à 18:48:34    

Ouais laisse tomber le typage fort là-dedans, ça va être l'arrache-tête. Tu peux effectivement wrapper les types de base dans des classes (genre String dans ton exemple), mais ça va tuer les performances à mort :(

Reply

Marsh Posté le 15-05-2008 à 09:27:25    

ca tiendrait qu'a moi je tafferais en .Net mais bon c'est pas le choix qui a été fait en interne...
Donc j'essaie de tendre vers ces langages là avec PHP 5
 
en fait je voudrais monter un socle, et dès le départ garantir les types de données qui  transitent de sorte a :
- etre certains des types réel pour faire du calcul
- que les méthodes vérifient elles memes les types des parametres qui leur sont envoyés. Ca eviterait de coder des controles en PHP et je ganerai en tests unitaires.  
bref simuler ce qu'est censé faire un compilo (et encore que cet aspect)

Reply

Marsh Posté le 15-05-2008 à 09:30:50    

toi , tu es du genre a utiliser un tournevis pour enfoncer un clou
 
le langage choisi ( php ) a des spécificités.  tu n'as pas le choix, tu dois faire avec  
 
Tu peux aussi , tout simplement, développer correctement, historie de savoir que si tu as mis un int dans une variable, il reste en int, aps besoin de le coder en dur


---------------

Reply

Marsh Posté le 15-05-2008 à 09:40:11    

flo850 a écrit :

toi , tu es du genre a utiliser un tournevis pour enfoncer un clou
 
le langage choisi ( php ) a des spécificités.  tu n'as pas le choix, tu dois faire avec  
 
Tu peux aussi , tout simplement, développer correctement, historie de savoir que si tu as mis un int dans une variable, il reste en int, aps besoin de le coder en dur


 
disons que c'est un travail d'equipe et c'est pas dit que l'equipe soit toujours la meme.
donc je veux eviter de faire appel a la responsabilité et la rigueur de toute l'équipe.
en gros faire en sorte que ca soit l'appli qui force la rigueur du développeur plutôt que l'inverse.
 
Si SPL_Types existe c'est bien que ca doit avoir une utilisé pour ceux qui demandent un typage fort.
 
FlorentG :  
- tu parlais d'arrache tete : a quel niveau ?
- pourquoi typer mes variables avec des classes ca tuerait les perfs ? PHP 5 est bien justement fait pour faire de l'objet...

Reply

Marsh Posté le 15-05-2008 à 09:49:27    

jokaritaff a écrit :

 

disons que c'est un travail d'equipe et c'est pas dit que l'equipe soit toujours la meme.
donc je veux eviter de faire appel a la responsabilité et la rigueur de toute l'équipe.
en gros faire en sorte que ca soit l'appli qui force la rigueur du développeur plutôt que l'inverse.


tu vas aller loin avec ce genre de raisonnement . Ensuite tu vas me dire que ton code sera de meilleur qualité que ce que les autres produiront
parceque si tu te lances dans un projet pareil , il faut que le gain soit supérieur a l'effort nécessaire, donc il faut que tes collègues soient potentiellement très mauvais

jokaritaff a écrit :


Si SPL_Types existe c'est bien que ca doit avoir une utilisé pour ceux qui demandent un typage fort.


il existe des lib pour quasi tout, ce n'est pas pour ca c'est une bonne idée

jokaritaff a écrit :


FlorentG :
- tu parlais d'arrache tete : a quel niveau ?


tu vas devoir redéfinir tous les opérateurs, toutes les fonctions de manipulation de string, d'int, de float ainsi que toutes les méthodes de cast.
par exemple, voici la liste de fonctions a redefinir pour les strings http://us2.php.net/strings
sachant qu'en php , pas de surcharge d'opérateur , donc tu ne pourra pas faire

Code :
  1. $myFisrtInt = new Int(3);
  2. $mySecondInt  = new Int(15);
  3. $myFisrtInt+=$mySecondInt;
 

Message cité 1 fois
Message édité par flo850 le 15-05-2008 à 09:50:18

---------------

Reply

Marsh Posté le 15-05-2008 à 10:08:16    

flo850 a écrit :


tu vas aller loin avec ce genre de raisonnement . Ensuite tu vas me dire que ton code sera de meilleur qualité que ce que les autres produiront
parceque si tu te lances dans un projet pareil , il faut que le gain soit supérieur a l'effort nécessaire, donc il faut que tes collègues soient potentiellement très mauvais  


 
Le nombre d'applis qui ont été truffées de bug paske certains jugeait super pratique de changer à loisir les types de variables.
Je dis pas que la faute est celles de developpeurs, je dis que c'est dommage de pas avoir de garantie de types.
 

flo850 a écrit :


il existe des lib pour quasi tout, ce n'est pas pour ca c'est une bonne idée


oué c'est vrai que si toutes les libs existe toutes ne sont pas utiles.
 

flo850 a écrit :


tu vas devoir redéfinir tous les opérateurs, toutes les fonctions de manipulation de string, d'int, de float ainsi que toutes les méthodes de cast.  
par exemple, voici la liste de fonctions a redefinir pour les strings http://us2.php.net/strings
sachant qu'en php , pas de surcharge d'opérateur , donc tu ne pourra pas faire

Code :
  1. $myFisrtInt = new Int(3);
  2. $mySecondInt  = new Int(15);
  3. $myFisrtInt+=$mySecondInt;




 
wé effectivement le coup du += meme si c'est qu'un exemple, est assez emmerdant !
a moins de faire  

Code :
  1. $myFisrtInt = new Int(3);
  2. $mySecondInt  = new Int(15);
  3. $myFisrtInt->additionne(array($mySecondInt));


 
mais c un peu tres con et ca devient tres vite infaisable.
quoique si je met une methode __toString qui renvoie la valeur du int, je travaille sur 2 entiers et non 2 objets.
mais ca me parait super casse gueule

Reply

Marsh Posté le 15-05-2008 à 10:08:21    

jokaritaff a écrit :

- que les méthodes vérifient elles memes les types des parametres qui leur sont envoyés.


 
http://fr.php.net/language.oop5.typehinting
 
T'as déjà ça pour tout ce qui n'est pas d'un type de base.


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 15-05-2008 à 10:13:39    

sielfried a écrit :


 
http://fr.php.net/language.oop5.typehinting
 
T'as déjà ça pour tout ce qui n'est pas d'un type de base.


 
si je prend l'exemple dans cette page :
 

Code :
  1. public function test(AutreClasse $autreclasse) {
  2.      echo $autreclasse->var;
  3. }


 
ca illustre exactement le principe de ce que je voudrais faire.
Autant ca marche tres bien pour des objets normaux et le type scalaire Array
 
autant ben je voudrais étendre cet exemple a ca :

Code :
  1. public function test(String $name, int $age) {
  2.      echo "je m'appelle $name et j'ai ".$age->toString()." ans";
  3. }


 
or ce n'est pas prévu nativement en PHP, d'ou ma problématique

Reply

Marsh Posté le 15-05-2008 à 10:13:39   

Reply

Marsh Posté le 15-05-2008 à 13:32:30    

Je trouve que ton idée va a l'encontre de ce que justement tu veux faire => Faire en sorte que n'importe qui puisse reprendre le code.
 
Si pour maintenir ton appli vous appelez un prestataire PHP, il ne s'attendra pas a trouver ta surcouche et au final la maintenance pourrait bien être encore moins bien assurée que si tu avais utilisé PHP d'une manière plus classique

Reply

Marsh Posté le 15-05-2008 à 14:30:50    

jokaritaff a écrit :


Des propositions ?

 

merci


Arrêter d'être stupide, et utiliser des tests unitaires.

 

Fuck bondage and discipline [:natas]

Message cité 1 fois
Message édité par masklinn le 15-05-2008 à 14:32:28

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 15-05-2008 à 14:38:22    

jokaritaff a écrit :

Le nombre d'applis qui ont été truffées de bug paske certains jugeait super pratique de changer à loisir les types de variables.


Les cowboys qui font n'importe quoi avec les langages faiblement typés feront autant voire plus de dégâts avec des langages fortement typés, crois-en un javateux. Ils s'arrangeront toujours pour passer un supertype Object à coups de downcasts, et l'effet sera le même, et/ou ils se lanceront dans des anti-patterns plus imaginatifs les uns que les autres.


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
Reply

Marsh Posté le 15-05-2008 à 14:44:58    

Au final, t'as l'air de vouloir faire du java en php, quoi.
 
> ben ma reflexion en prend largement le chemin.
Certes ca revient a dénaturer l'usage de PHP, mais ca vaut toujours le coup de se poser des question (avant de faire quoi que ce soit)
meme si certains d'entre vous trouvent ces question stupides.
 
Pourquoi ne pas faire du java directement ?
>j'aimerais bien !!! mais je peux pas , dans ma boite je suis développeur par directeur technique.
Et il veut pas de Java.
Ce qui est bien dommage paske Java me permettrait de mettre en oeuvre toutes ca sans probleme.
 
La question n'est pas de savoir si ce que je veux faire correspond aux directives PHP5, et si c normalisé
je cherche juste a expérimenter, savoir ce qui est possible de faire, et voir ce qui craint ou est faisable.
 
Je dis pas que je vais mettre en oeuvre ces idées qui d'après vous et votre expérience sont aberrantes
le fait est que j'emprunte des sentiers hors-piste des pour justement écarter des choix aberrants et adopter des bons choix
avant de commencer le moindre développement.
 
Donc merci de vos conseils.  :sol:  
 
Maintenant si effectivement c vraiment le bordel et que ca va plus me desservir l'application qu'autre chose
alors ok je typerai pas mes primitives en classes et je ferai des contrêles de types (is_int(), is_string(), etc...)


Message édité par jokaritaff le 15-05-2008 à 14:51:27
Reply

Marsh Posté le 15-05-2008 à 14:52:10    

Apprends donc plutôt à coder correctement dans un langage dynamiquement typé, ça te sera plus utilise qu'essayer de faire du Java en PHP, qui n'a pas grand intérêt (déjà que faire du Java en Java ça n'a pas grand intérêt pour faire du web...)

jokaritaff a écrit :

alors ok je typerai pas mes primitives en classes et je ferai des contrêles de types (is_int(), is_string(), etc...)


 [:prozac]

Message cité 1 fois
Message édité par masklinn le 15-05-2008 à 14:52:54

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 15-05-2008 à 14:56:39    

masklinn a écrit :

Apprends donc plutôt à coder correctement dans un langage dynamiquement typé, ça te sera plus utilise qu'essayer de faire du Java en PHP, qui n'a pas grand intérêt (déjà que faire du Java en Java ça n'a pas grand intérêt pour faire du web...)


 
donc ca signifie que les débats sur le typage fort de PHP sur les principaux portails PHP ils sont juste la pour enc*** les mouches
 
bon je vais m'arreter la paske on était parti sur "est ce que ya moyen de typer ses variabels PHP" et on en vient a des réflexions a peu inutiles comme  "apprend a coder pour le web"

Message cité 1 fois
Message édité par jokaritaff le 15-05-2008 à 14:56:54
Reply

Marsh Posté le 15-05-2008 à 14:58:47    

http://forum-images.hardware.fr/images/perso/prozac.gif
 
ca veut dire :
- putain mais arrete d'essayer de typer tes variables
ou
- c'est quoi cette méthode pour vérifeir les types ?  


Message édité par jokaritaff le 15-05-2008 à 14:59:58
Reply

Marsh Posté le 15-05-2008 à 14:58:52    

jokaritaff a écrit :

 

donc ca signifie que les débats sur le typage fort de PHP sur les principaux portails PHP ils sont juste la pour enc*** les mouches


Non, ça signifie que PHP n'a ni typage "fort" quelle que soit la définition que tu donnes à ça ni typage statique qui est ce dont tu parles depuis le début de ce thread.

jokaritaff a écrit :

bon je vais m'arreter la paske on était parti sur "est ce que ya moyen de typer ses variabels PHP" et on en vient a des réflexions a peu inutiles comme  "apprend a coder pour le web"


Et en plus t'es pas foutu de lire du français :/

jokaritaff a écrit :


http://forum-images.hardware.fr/im [...] prozac.gif

 

quelle est ta méthode pour vérifier les types ? a moins que tu le fasse pas...


Je ne le fais pas, quand le langage que j'utilise est typé dynamiquement.

Message cité 1 fois
Message édité par masklinn le 15-05-2008 à 15:00:12

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 15-05-2008 à 15:01:11    

masklinn a écrit :


Je ne le fais pas, quand le langage que j'utilise est typé dynamiquement.


 
ok

Reply

Marsh Posté le 15-05-2008 à 15:39:33    

masklinn a écrit :


Arrêter d'être stupide, et utiliser des tests unitaires.
 
Fuck bondage and discipline [:natas]


+1 [:natas] [:natas] [:natas]


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
Reply

Marsh Posté le 15-05-2008 à 16:33:43    


qui t'as laissé rentrer ? [:cerveau sadnoir]

Reply

Marsh Posté le 15-05-2008 à 22:32:50    

Harkonnen a écrit :


qui t'as laissé rentrer ? [:cerveau sadnoir]


J'avais tapé "bondage" dans Google et je suis arrivé ici. Et attends, demain, c'est vendredi. [:pingouino] [:dawa]


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
Reply

Marsh Posté le 16-05-2008 à 09:30:36    

La rigueur c'est bien, mais je pense que ça ne doit pas se faire au détriment de l'architecture de l'application.
 
Si, juste pour s'assurer que les variables sont dans le bon type, tu imposes une structure très restrictive, ça ne vaut pas le coup. D'autant que coder soit même des wrapper des types simples peut entrainer des erreurs.
 
Le développeur doit s'adapter à l'environnement qu'on lui impose. Ca ne doit pas être le développeur qui modifie le comportement de l'environnement pour qu'il convienne à un modèle dont il a l'habitude.
 
Les automatismes sont le pire enemi du dev à mon sens ;)

Reply

Marsh Posté le 16-05-2008 à 10:37:46    

vanadium a écrit :

Les automatismes sont le pire enemi du dev à mon sens ;)


Qu'entends tu par "les automatismes"?


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 16-05-2008 à 13:33:12    

Je n'ai qu'une chose à dire :
 
http://fr3.php.net/is_a


---------------
Directeur Technique (CTO)
Reply

Marsh Posté le 16-05-2008 à 13:38:38    

masklinn a écrit :


Qu'entends tu par "les automatismes"?


 
Les habitudes qu'on a dans un langage de programmation et qu'on veut à tout prix conserver en changeant de langage.

Reply

Marsh Posté le 16-05-2008 à 13:39:34    

vanadium a écrit :

Les habitudes qu'on a dans un langage de programmation et qu'on veut à tout prix conserver en changeant de langage.


Dans ce sens là, je suis parfaitement d'accord, Python is not Java toussa :o


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 07-11-2008 à 20:32:30    

je me permets de répondre même si c'est 6 mois après la bataille.
juste pour défendre un peu jokaritaff même si je ne suis pas complètement d'accord avec lui.
 
Je suis tombé sur cette article car je cherche aussi une manière de faire du typage fort sans en arriver à recréer des class qui de toute façon ne feront qu'alourdir le code
 
Il faut savoir que le typage fort permet de créer des modules sur lesquels le fonctionnement est définit.
 
j'en ai marre par exemple de me refaire une couche d'accés au données (SQL) a chaque fois:
- vérifier les types en entrées  
- vérifier la none injection de code (SQL)
- vérifier le bon fonctionnement de ma requête et de renvoyer une exception si ce n'est pas le cas
 
En ce sens faire un module réutilisable nécessite un minimum de rigueur
 
Je suis d'accord que certains automatismes ne sont pas toujours bon mais la gestion des erreurs existe en php et ce n'est pas pour rien  
certains peuvent s'en passer mais les testes unitaires ne suffisent pas toujours (pour info : le typage fort génère un certain nombre d'exceptions).  
Lorsqu'on réalise une application de paye mieux vaut blinder son code contre toutes les erreurs possibles pour arriver à un taux de couverture de l'ordre de 99%
Alors autant s'appuyer sur des modules strictes.
 
Alors pour conclure je dirais que "avoir un module sur-blindé"  que tu pourras réutiliser dans d'autres circonstances doit être un minimum verrouillé.
 
a bon entendeur.
 
PS : C'est bizarre que sur ce forum les gens se foutent dessus si vigoureusement.
 
PS2 : j'en suis arrivé a faire 70 tests de is_int is_string is_a ... pour blinder mon code qui n'auraient pas été nécessaires avec des typages forts.
 
PS3 ne me faites pas dire ce que je n'ai pas dis je ne suis pas pour un typage fort obligatoire mais plus possible.

Message cité 1 fois
Message édité par lagaman le 07-11-2008 à 20:58:53
Reply

Marsh Posté le 07-11-2008 à 20:52:00    

lagaman a écrit :


Je suis tomber sur cette article car je cherche aussi une manière de faire du typage fort sans en arriver à recréer des class qui de toute façon ne feront qu'alourdir le code


développe , ça m'interesse

lagaman a écrit :


Il faut savoir que le typage fort permet de créer des modules sur lesquels le fonctionnement est définit.
 
j'en ai marre par exemple de me refaire une couche d'accés au données (SQL) a chaque fois:
- vérifier les types en entrées  
- vérifier la none injection de code (SQL)
- vérifier le bon fonctionnement de ma requête et de renvoyer une exception si ce n'est pas le cas


c'est pour ca qu'il existe deja des modules prédéfinis ( requetes préparés par exemple ) . Alor ssi ça t'amuse de réinventé la roue , pas moi  

lagaman a écrit :


en ce sens faire un module réutilisable nécessite un minimum de rigueur


la première partie de ton post que j'approuve


---------------

Reply

Marsh Posté le 07-11-2008 à 21:03:02    

flo850 a écrit :


c'est pour ca qu'il existe deja des modules prédéfinis ( requetes préparés par exemple ) . Alor ssi ça t'amuse de réinventé la roue , pas moi  


tu m'en diras tant,  tous les OMR que j'ai vue créent des requètes à rallonge et rendent dans bien des cas ta base illisible

flo850 a écrit :


la première partie de ton post que j'approuve


merci  
 
PS: j'ai corrigé mon précédent message si ca t'interrese


Message édité par lagaman le 07-11-2008 à 21:03:35
Reply

Marsh Posté le 07-11-2008 à 21:06:51    

avec 'juste' des requètes préparées , tu gardes un total controle sur les requêtes, mais plus aucun risque d'injection et tu controles le typage
http://fr2.php.net/manual/en/mysql [...] -param.php

 

ps : si tu veux , on peut se foutre sur la gueule, masi c'est bcp moins soft

 



Message édité par flo850 le 07-11-2008 à 21:09:06

---------------

Reply

Marsh Posté le 07-11-2008 à 21:10:21    

merci beaucoup je ne connaissais pas
 
Ps : pour se foutre sur la gueule je ne suis pas bien fan et j'apprécie d'autant plus ta précédente réponse  


Message édité par lagaman le 07-11-2008 à 21:14:40
Reply

Marsh Posté le 07-11-2008 à 21:14:55    

le typage fort peut etre utile dans bien des cas, mais pas pour l'accès aux bdd
 
et dans tous les cas, si tu as des classes à passer en paramètres, tu peu faire du type hinting : http://ch2.php.net/language.oop5.typehinting
 
 


---------------

Reply

Marsh Posté le 07-11-2008 à 21:21:52    

flo850 a écrit :


et dans tous les cas, si tu as des classes à passer en paramètres, tu peu faire du type hinting : http://ch2.php.net/language.oop5.typehinting
 


ça par contre je connais mais merci pour l'info

Reply

Marsh Posté le 12-11-2008 à 09:45:52    

oui le type hinting est une avancée intéressante de PHP5
 
mais c 'est dommage que ca se limite aux types objet et array
j'aurais aimé que ca soit possible egalement avec les types primitifs (string, int, double, float, bool)
 
car on se retrouve toujours a faire les traditionnelles verifs avec is_int, is_string, ...
Le type hinting permet d'eviter uniquement les is_array et instance of
 
ce qui serait génial ca serait aussi que  
- les fonctions natives soit déplacée dans des classes thématiques (String, File, Socket, ...) comme le font .Net et Java.
Ainsi on instancie un new String('blabla') et l'objet instancié possède toutes les méthodes qui concernent une chaine.
 
- la surcharge d'opérateurs soit prise en charge :
$maChaine = new String('blabla');
$maChaine .= 'et bla';
 
un peu comme font la plupart des autres langages objets.
 
j'ai vu qu'il il existe un débat assez chaud sur ces aspects, car la communauté PHP commence a se séparer en 2 :
ya ceux qui veulent que PHP continue d'etre un langage simple a manipuler et ceux qui veulent qu'il devienne un langage beaucoup plus étoffé qui ressemble plus a un poids lourd objet (tel .net, Java)

Reply

Marsh Posté le 12-11-2008 à 10:03:56    

jokaritaff a écrit :

car on se retrouve toujours a faire les traditionnelles verifs avec is_int, is_string, ...


You're doing it wrong

jokaritaff a écrit :

un poids lourd objet (tel .net, Java)


Le typage statique et le typage explicite sont orthogonaux à l'orientation objet du langage (je te suggère d'aller découvrir Smalltalk, on fait difficilement plus "orienté objet" et c'est du late-bound dynamically typed sans annotations)

Message cité 2 fois
Message édité par masklinn le 12-11-2008 à 10:08:13

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 12-11-2008 à 10:08:35    


L'anglais m'a tuer [:sisicaivrai]


Message édité par masklinn le 12-11-2008 à 10:09:05

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 12-11-2008 à 10:33:11    

masklinn a écrit :


You're doing it wrong


what's the right one ?
 

masklinn a écrit :


Le typage statique et le typage explicite sont orthogonaux à l'orientation objet du langage (je te suggère d'aller découvrir Smalltalk, on fait difficilement plus "orienté objet" et c'est du late-bound dynamically typed sans annotations)


quelle différence entre typage statique et dynamique ?

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed