typage fort ? - PHP - Programmation
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
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
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)
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
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 |
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...
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. |
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 :
|
il existe des lib pour quasi tout, ce n'est pas pour ca c'est une bonne idée
jokaritaff 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 :
|
Marsh Posté le 15-05-2008 à 10:08:16
flo850 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.
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 : |
oué c'est vrai que si toutes les libs existe toutes ne sont pas utiles.
flo850 a écrit :
|
wé effectivement le coup du += meme si c'est qu'un exemple, est assez emmerdant !
a moins de faire
Code :
|
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
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.
Marsh Posté le 15-05-2008 à 10:13:39
sielfried a écrit : |
si je prend l'exemple dans cette page :
Code :
|
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 :
|
or ce n'est pas prévu nativement en PHP, d'ou ma problématique
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
Marsh Posté le 15-05-2008 à 14:30:50
jokaritaff a écrit :
merci |
Arrêter d'être stupide, et utiliser des tests unitaires.
Fuck bondage and discipline
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.
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.
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...)
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...) |
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"
Marsh Posté le 15-05-2008 à 14:58:47
ca veut dire :
- putain mais arrete d'essayer de typer tes variables
ou
- c'est quoi cette méthode pour vérifeir les types ?
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 :
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.
Marsh Posté le 15-05-2008 à 15:01:11
ReplyMarsh Posté le 15-05-2008 à 15:39:33
masklinn a écrit : |
+1
Marsh Posté le 15-05-2008 à 16:33:43
ReplyMarsh Posté le 15-05-2008 à 22:32:50
Harkonnen a écrit : |
J'avais tapé "bondage" dans Google et je suis arrivé ici. Et attends, demain, c'est vendredi.
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
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"?
Marsh Posté le 16-05-2008 à 13:33:12
ReplyMarsh Posté le 16-05-2008 à 13:38:38
masklinn a écrit : |
Les habitudes qu'on a dans un langage de programmation et qu'on veut à tout prix conserver en changeant de langage.
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
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.
Marsh Posté le 07-11-2008 à 20:52:00
lagaman a écrit : |
développe , ça m'interesse
lagaman 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
lagaman a écrit : |
la première partie de ton post que j'approuve
Marsh Posté le 07-11-2008 à 21:03:02
flo850 a écrit : |
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 : |
merci
PS: j'ai corrigé mon précédent message si ca t'interrese
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
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
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
Marsh Posté le 07-11-2008 à 21:21:52
flo850 a écrit : |
ça par contre je connais mais merci pour l'info
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)
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)
Marsh Posté le 12-11-2008 à 10:08:35
L'anglais m'a tuer
Marsh Posté le 12-11-2008 à 10:33:11
masklinn a écrit : |
what's the right one ?
masklinn a écrit : |
quelle différence entre typage statique et dynamique ?
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