|
Publicité ' | ||||||||||||||||||||||||
|
|
#41 | |
|
Candidat au titre de Membre du Club
![]() Inscription : octobre 2007 Messages : 11 ![]() |
Citation:
![]() à par pour des librairies et dans certains cas particulier je n'utilise pas de class, mieux vaut préféré à mon avis un bonne méthode de développement, ce qui est clair c'est qu'avec un code pourrit je préfère que celui-ci soit écrit procéduralement qu'avec des class. Des class OK mais surtout pas tombé dans l'abus (j'ai même eu l'occasion de voir une fois un traitement pour uploader une image qui passait pas 6 classes dont chacunes faisait un petit morceau, autant dire un truc imbuvable) PS : ne metter pas dans une class, du code dont vous êtes sur que vous allez vous en servir qu'une seule fois !
|
|
|
|
00
|
|
|
#42 | ||||
|
Nouveau Membre du Club
![]() Inscription : avril 2007 Messages : 50 ![]() |
Salut à tous,
Ce post m'a paru très intéressant, du coup, je me suis livré à qqs expériences et comparaisons entre PHP et C#. J'ai trouvé un comportement différent entre les deux langages au niveau de l'appel des classes. Si quelqu'un peut m'expliquer le pourquoi de cette différence de comportement et surtout quel langage est "juste" ? Ci-dessous le code PHP : Code :
Ci-dessous le même code en C# où la ligne echo job_A::doIt(); en PHP n'a aucune équivalence (où en tous cas je ne l'ai pas trouvé !). Code :
Lionel. |
||||
|
|
00
|
|
|
#43 |
![]() ![]() Guillaume RossoliniDirecteur technique Inscription : février 2004 Messages : 13 720 ![]() |
Je te l'accorde, appeler une méthode d'objet comme on appellerait une méthode de classe n'a pas grand intérêt. Sur ce coup, PHP n'est pas encore tout à fait au point.
PHP5 a marqué un très grand pas vers un modèle objet idéal, mais nous n'y sommes pas encore Rappelons que PHP est avant tout un langage de script plutôt qu'un langage compilé, et qu'il a tout intérêt à conserver cette optique.
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework) Ressources PHP - Ressources Zend Framework |
|
|
00
|
|
|
#44 | |
|
Candidat au titre de Membre du Club
![]() Inscription : octobre 2007 Messages : 9 ![]() |
Citation:
Tu ne mélangerai pas un peu les notions d' abstract et de static ? Quand tu codes job_A::doIt(); tu fais non pas un appel de type abstract, mais un appel à une méthode static d'une classe. Php est très permissif et pour être sur de coder "propre" rajoute et regarde les alertes générées. L'appel d'une méthode non static en static '::' génère une alerte. L'instanciation d'une classe abstraite génère ... rien, une page vide et rien dans la log. (si quelqu'un à des infos la dessus) Pour abstract regarde -> http://www.php.net/manual/fr/language.oop5.abstract.php Cdt |
|
|
|
00
|
|
|
#45 | ||
|
Membre habitué
![]() |
Bonjour,
Pour continuer sur la maturité de la POO en PHP, je voulais ajouter une petite réfection perso sur la robustesse du code. Voici une classe : Code :
Tout ça pour dire que ce genre d'erreur, trop facile à faire, est assez dangereuse pour la robustesse d'un code objet PHP. Alors bien entendu si on teste correctement ou si on fait attention, cela n'est pas très problématique mais vu que PHP est plus un langage à objets que objet tout court, j'ai peur que le mélange de la logique d'esprit procédurale et objet engendrent des erreurs d'inattention tels que l'oubli d'un « $this-> » de temps à autre. C'est peut être moi le tordu mais il m'est arrivé de passer du temps à débusquer ce genre d'ânerie qui ne saute pas aux yeux tout de suite. Peut-être qu'un outil d'analyse de code m'aurait averti que la variable n'était pas initialisée au moment du print mais c'est dommage d'être obligé d'en arriver à utiliser des batteries d'outils pour détecter cette si petite boulette. Conclusion : quand je code, je ne mélange pas trop le codage des classes et du code « appelant procédural » le même jour... EDIT : après réflexion il me semble qu'on peut activer un warning pour l'utilisation de variables non instanciées. Alors j'ai rien dit... M'enfin je maintient que le coup du « $this » qui manque c'est très vicieux hein... |
||
|
|
00
|
|
|
#46 |
|
Membre éclairé
![]() Inscription : décembre 2004 Messages : 662 ![]() |
oula on peut pas être a la place du codeur non plus.
Ton exemple c'est un peu comme le mec qui fait une boucle infini car il a pas fait attention a sa clause d'arret. Et ca ca n'a rien a voir avec le langage. Le langage a ses expressions et sa syntaxe a respecter apres c'est au codeur de faire attention.
__________________
Pour me faire grandir |
|
|
00
|
|
|
#47 | |||||||
|
Membre habitué
![]() Inscription : janvier 2003 Messages : 181 ![]() |
Citation:
classe abstraite et méthode static sont deux notions complètement différentes. Effectivement si l'exemple que tu donnes fonctionne , il s'agit d'un bug. Car il ne doit pas être possible d'accédèr à une méthode non static d'une classe qui n'est pas instanciée. L'exemple que tu donnes n'est pas lié aux classes abstraites mais à la méthode static. Quand tu utilises "::" il s'agit d'un accesseur qui permet de faire appel à des méthodes. Pour faire appel à une méthode statique, l'unique moyen est d'utiliser "::" http://fr.php.net/manual/en/language...ekudotayim.php Si ta méthode n'était pas statique, tu pourrais l'appeller de la même façon à partir d'un objet qui étendrait ta classe abstraite. Exemple : Code :
Cela ne doit servir que dans le cadre de design pattern. Et comme ça t'as choqué, c'est très moche (mais autorisé) d'utiliser des "::" pour accéder à des méthodes non statics.
__________________
PhpMyObject teck leader http://pmo.developpez.com La justice de l'intelligence est la sagesse. Le sage n'est pas celui qui sait beaucoup de choses, mais celui qui voit leur juste mesure. |
|||||||
|
|
00
|
|
|
#48 | |||
|
Nouveau Membre du Club
![]() Inscription : avril 2007 Messages : 50 ![]() |
Citation:
Toutefois, il faut effectivement bien penser à mettre error_reporting(2048); dans son code car sans ça voici ce qu'il est possible d'écrire sans que PHP ne bronche : Code :
Il affiche un message d'erreur certes, mais poursuit l'exécution du script ! Lionel. |
|||
|
|
00
|
|
|
#49 | |
|
Candidat au titre de Membre du Club
![]() Inscription : octobre 2007 Messages : 9 ![]() |
Citation:
La majorité des classes d'une appli web sont mono-instance et pourraient (ou plutôt doivent) être traitées comme des singletons. Les appels 'static' sont résolus à la compilation. Alors pourquoi ralentir et complexifier en traitant comme du multi-instances des objets que l'on sait pertinemment qu'ils ne seront jamais instanciés plus d'une fois. Encore une fois, c'est vraiment philosophique comme débat. Il faut, comme tu le dis si bien, faire la juste mesure, concilier modèle et performance. Cdt |
|
|
|
00
|
|
|
#50 | |
|
Membre habitué
![]() Inscription : janvier 2003 Messages : 181 ![]() |
Citation:
Utilisez des STATIC en tant que variables globales à toutes les sauces, n'importe ou, n'importe quand, juste parce qu'on maitrise mal les concepts de visibilité, c'est du n'importe quoi. Je conseille fortement aux débutants en Orienté objet d'utiliser pour commencer des variables privates, puis quand vous maitrisez bien des protected pour comprendre l'héritage, et en dernier lieu les static pour aborder les design pattern. Mais surtout n'utilisez pas les static au départ !!!
__________________
PhpMyObject teck leader http://pmo.developpez.com La justice de l'intelligence est la sagesse. Le sage n'est pas celui qui sait beaucoup de choses, mais celui qui voit leur juste mesure. |
|
|
|
00
|
|
|
#51 | |||
|
Candidat au titre de Membre du Club
![]() Inscription : octobre 2007 Messages : 9 ![]() |
Citation:
Dans ce cas précis, je penche pour l'appel static beaucoup plus performant et moins consommateur de mémoire, la création d'une instance n'apportant absolument rien. Attention tout de même, chaque cas est différent et il ne faut pas non plus faire l'erreur inverse en rendant static une méthode ou variable qui ne le sont pas. Cdt |
|||
|
|
00
|
|
|
#52 | |
|
Candidat au titre de Membre du Club
![]() Inscription : octobre 2007 Messages : 9 ![]() |
Citation:
Cdt |
|
|
|
00
|
|
|
#53 | |
|
Membre habitué
![]() |
Citation:
|
|
|
|
00
|
|
|
#54 |
|
Expert Confirmé Sénior
![]() ![]() Inscription : mai 2004 Messages : 4 541 ![]() |
Franchement, aborder le développement de grosses applications PHP en faisant l'impasse sur la POO ne me paraît pas raisonnable... A moins d'abandonner toute possibilité de maintenance évolutive. D'autant que si vous adoptez un framework MVC, ce qui est fortement recommandé, l'usage de la POO vous est quasiment imposé.
__________________
FAQ XML ------------ « Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser » Giacomo Leopardi |
|
|
00
|
|
|
#55 | |
|
Membre habitué
![]() Inscription : janvier 2003 Messages : 181 ![]() |
Citation:
__________________
PhpMyObject teck leader http://pmo.developpez.com La justice de l'intelligence est la sagesse. Le sage n'est pas celui qui sait beaucoup de choses, mais celui qui voit leur juste mesure. |
|
|
|
00
|
|
|
#56 | |
|
Expert Confirmé
![]() ![]() Développeur informatique Inscription : février 2005 Messages : 3 031 ![]() |
Citation:
.Fortement recommandé un MCV?
__________________
Mon avatar ? Ce n'est rien, c'est juste la tête que je fais lorsque je vois un code complètement frappa dingue !... |
|
|
|
00
|
|
|
#57 | |
|
Candidat au titre de Membre du Club
![]() Inscription : octobre 2007 Messages : 11 ![]() |
Citation:
Un code en POO prendra toujours plus de place que du procédural, je te me met au deffit de me trouver un contre example ! il n'y a aucune mauvaise technique, il y a que des mauvais choix et ça, ça dépent du dévelppeur |
|
|
|
00
|
|
|
#58 | |
|
Membre habitué
![]() Inscription : janvier 2003 Messages : 181 ![]() |
Citation:
En objet tu ne travailles pas avec des variables mais avec des objets. Tu travailles sur des références, et le gros paté de code que t'as en impératif qui fait tout, est éclaté en petit composant beaucoup plus simple à comprendre, et optimiser. Autant, j'imagine que tu te réjouir d'utiliser les fonctions en impératif parce que ça rend plus clair ton code, autant en objet le concept est beaucoup plus abouti. Dans les codes impératifs, tu retrouves régulièrement des bouts de code un peu partout qui font la même chose. C'est une question d'abstraction. Exemple : passer des paramètres au fonctions. mafonction(mavariable1,mavariable2,mavariable3,mavariable4,mavariable5); devient en objet mafonction(monobjet);
__________________
PhpMyObject teck leader http://pmo.developpez.com La justice de l'intelligence est la sagesse. Le sage n'est pas celui qui sait beaucoup de choses, mais celui qui voit leur juste mesure. |
|
|
|
00
|
|
|
#59 | |
|
Candidat au titre de Membre du Club
![]() Inscription : octobre 2007 Messages : 9 ![]() |
Citation:
Tu as donné L'Argument majeur. Grosse application + développement collaboratif => MVC et donc POO. Il faut se poser la question d'utilisation de MVC et de POO dans le cas de petites/moyennes applications avec 1 ou 2 développeurs. Il ne faut pas perdre de vue que développer en MVC et donc généralement avec un framework, demande que le modèle soit parfaitement documenté. Cela demande non plus de savoir coder en Php, mais de maitriser le framework et le modele mvc sur lequel on s'appuie et plus généralement la POO. J'ai récemment eu à intervenir en task force sur une application conçue sur un framework MVC et ORM d'une société disparue, s'appuyant lui même sur du smarty et du PEAR, sans aucune doc, et là, je ne souhaite cela à personne. ![]() Bilan: Constat de non récupération, évolutions réduites au minimum, et réécriture totale conseillée. Il est tout aussi impensable d'obliger à faire de la POO que de l'interdire. Il faut juste être conscient des avantages et des inconvénients qui ont été évoqués tout au long de ce forum. Bonne journée à tous Cdt |
|
|
|
00
|
|
|
#60 | |
|
Membre habitué
![]() Inscription : janvier 2003 Messages : 181 ![]() |
Citation:
Perso, j'espère que PHP tira une croix définitivement sur l'impératif, et typera plus fortement ses variables. Une raison simple: voir de plus en plus de code PHP dans les entreprises et sur les gros projets, et ne plus trainer "cette réputation de langage pour les bidouilleurs".
__________________
PhpMyObject teck leader http://pmo.developpez.com La justice de l'intelligence est la sagesse. Le sage n'est pas celui qui sait beaucoup de choses, mais celui qui voit leur juste mesure. |
|
|
|
00
|
Copyright © 2000-2013 - www.developpez.com