IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Que pensez-vous de PHP 5.3 ? [Débat]


Sujet :

Langage PHP

  1. #61
    Membre émérite
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 448
    Points : 2 284
    Points
    2 284
    Par défaut
    Là précisèment je ne peut te donner le message d'erreur car je suis repassé sur la 5.2.9. Mais j'ai un exemple en tête.

    fron scratch :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    class logger extends ArrayObject{
    public function append( $message, $categorie, $niveau ){
    }
    }
    Normalement avec cet exemple, et en te positionnant sur e_strict, php devrais emettre un message concernant la signature de la méthode logger::append qui n'est plus compatible avec ArrayObject::append.

    donc bof, j'ai pas envie de mettre ces arguments en optionnel cela me ferait du job que php peut déjà faire.

    m'enfin je vérifierais tout de même tout à l'heure que l'exemple est ok.

  2. #62
    Expert éminent
    Avatar de berceker united
    Profil pro
    SQL
    Inscrit en
    Février 2005
    Messages
    3 488
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SQL
    Secteur : Finance

    Informations forums :
    Inscription : Février 2005
    Messages : 3 488
    Points : 6 037
    Points
    6 037
    Par défaut
    Citation Envoyé par kaymak Voir le message
    Là précisèment je ne peut te donner le message d'erreur car je suis repassé sur la 5.2.9. Mais j'ai un exemple en tête.

    fron scratch :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    class logger extends ArrayObject{
    public function append( $message, $categorie, $niveau ){
    }
    }
    Normalement avec cet exemple, et en te positionnant sur e_strict, php devrais emettre un message concernant la signature de la méthode logger::append qui n'est plus compatible avec ArrayObject::append.

    donc bof, j'ai pas envie de mettre ces arguments en optionnel cela me ferait du job que php peut déjà faire.

    m'enfin je vérifierais tout de même tout à l'heure que l'exemple est ok.
    Là, je dirais que ça reste discutable. Pour moi il y a pas de raison que ça puisse péter une erreur, vu que tu souhaites surcharger une méthode d'une classe parente. Par contre, il n'est toujours pas possible de surcharger une méthode d'une même classe en changeant sa signature et je pense que c'est ça qui fait qu'il y a conflit d'erreur.
    Peut être que c'est une erreur et tu peux éventuellement ouvrir un ticket sur ce point. Pour moi, il y a pas de raison que cela change à moins que cela était prévus.
    Mon avatar ? Ce n'est rien, c'est juste la tête que je fais lorsque je vois un code complètement frappa dingue !...

  3. #63
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Salut

    Pour info, la surcharge de méthode d'une classe parente est soumise à certaines contraintes (bonnes pratiques POO) :

    • même nombre d'arguments obligatoires
    • même visibilité (public/protected/private)


    C'est simplement l'implémentation POO par PHP qui le préconise. La réflexion est que si on change ces aspects d'une méthode, alors le polymorphisme n'est plus la même. Si j'ai une classe A et une classe B qui en dérive, je dois pouvois appeler les méthodes de B de la même manière que celles de A puisque ce sont des objets compatibles : si vous changez la visibilité de la méthode ou le nombre d'arguments obligatoires, alors ce n'est plus possible et vous cassez toute la conception OO de votre application.

  4. #64
    Expert éminent
    Avatar de berceker united
    Profil pro
    SQL
    Inscrit en
    Février 2005
    Messages
    3 488
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SQL
    Secteur : Finance

    Informations forums :
    Inscription : Février 2005
    Messages : 3 488
    Points : 6 037
    Points
    6 037
    Par défaut
    Citation Envoyé par Yogui Voir le message
    Salut

    Pour info, la surcharge de méthode d'une classe parente est soumise à certaines contraintes (bonnes pratiques POO) :

    • même nombre d'arguments obligatoires
    • même visibilité (public/protected/private)


    C'est simplement l'implémentation POO par PHP qui le préconise. La réflexion est que si on change ces aspects d'une méthode, alors le polymorphisme n'est plus la même. Si j'ai une classe A et une classe B qui en dérive, je dois pouvois appeler les méthodes de B de la même manière que celles de A puisque ce sont des objets compatibles : si vous changez la visibilité de la méthode ou le nombre d'arguments obligatoires, alors ce n'est plus possible et vous cassez toute la conception OO de votre application.
    Je suis d'accord avec toi. Par contre, je m'étonne qu'avant cela ait pu fonctionner avant comme il le décrit.
    Mon avatar ? Ce n'est rien, c'est juste la tête que je fais lorsque je vois un code complètement frappa dingue !...

  5. #65
    Membre émérite
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 448
    Points : 2 284
    Points
    2 284
    Par défaut
    Je sais bien yogui.... Mais en php5.2 sa ne le faisait pas et sa m'arrangeait bien.
    La je serais obliger de modifier le design en implémentant countable et iterator pour garder le même appel.... si ce n'est plus.

  6. #66
    Expert éminent
    Avatar de berceker united
    Profil pro
    SQL
    Inscrit en
    Février 2005
    Messages
    3 488
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SQL
    Secteur : Finance

    Informations forums :
    Inscription : Février 2005
    Messages : 3 488
    Points : 6 037
    Points
    6 037
    Par défaut
    Citation Envoyé par kaymak Voir le message
    Je sais bien yogui.... Mais en php5.2 sa ne le faisait pas et sa m'arrangeait bien.
    La je serais obliger de modifier le design en implémentant countable et iterator pour garder le même appel.... si ce n'est plus.
    Donc cela signifie que tu as mal monté ton affaire .
    Ce qui m'étonne pourquoi cela ait été changé maintenant ?
    Mon avatar ? Ce n'est rien, c'est juste la tête que je fais lorsque je vois un code complètement frappa dingue !...

  7. #67
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Cela n'a pas vraiment changé, il me semble qu'avec PHP 5.2 c'était déjà inclus dans le niveau E_STRICT. Peut-être que PHP 5.3 a simplement rendu ce niveau d'erreurs plus visible, je n'ai pas vérifié. Quelqu'un a-t-il davantage d'informations ?

  8. #68
    Membre éclairé
    Avatar de Floréal
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    456
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 456
    Points : 849
    Points
    849
    Par défaut
    Bonjour,
    Je me pose des questions quant à l'utilisation de la fonction __autoload() en php 5.3.
    En effet l'introduction des namespace sucite ma curiosité, je vais illustrer cela par quelques exemples:
    partant de ces deux scripts:

    Class.class.php:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <?php
    class Classe {
      //...
    };

    ns/Class.class.php:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?php
    namsepace \ns;
    class Classe {
      //...
    };
    ns/Class2.class.php:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?php
    namsepace \ns;
    class Classe2 {
      //...
    };
    cas 1:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $objet1 = new \Classe();
    $objet2 = new \ns\Classe();

    cas 2:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    use \ns;
    $objet1 = new Classe2();
    Comment doit-on définir la fonction __autoload() dans le premier cas?
    Est-ce que les namespaces préfixés sont passés en paramètre de la fonction __autoload()?
    Existe-t'il, pour le second cas un équivalent de __autoload() pour les namespaces à redéfinir (appelée lors de l'utilisation d'un use, par exemple, pour savoir si la classe)?

    En fait je pensais à un truc dans ce genre là était possible (en s'appuyant sur l'exemple que j'ai donné un peu plus haut):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    <?php
    function __autouse($ns) {
      global $__used_ns_dirs;
      if (!isset($__ns_dirs)) {
        $__used_ns_dirs = array()
      }
      $__used_ns_dirs[] = $ns;
    }
     
    function __autoload($class_name) {
      global $__used_ns_dirs;
      $search_dir = isset($__used_ns_dirs) ? $__used_ns_dirs : array();
      foreach ($search_dir) {
        // ajout de la classe avec les verifications necessaires (INCLUDE_PATH, etc.) en tennat compte des namepsace.
      }
    }
    Ancien membre du projet "Le Dernier Âge".

  9. #69
    Membre éclairé Avatar de metagoto
    Profil pro
    Hobbyist programmateur
    Inscrit en
    Juin 2009
    Messages
    646
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Hobbyist programmateur

    Informations forums :
    Inscription : Juin 2009
    Messages : 646
    Points : 845
    Points
    845
    Par défaut
    Quand php appelle les __autoload, le nom de la classe qui est passé en paramètre est un nom complètement qualifié (cependant, le premier '\' n'est jamais passé).
    Exemple, si le namespace courant est machin\truc et que tu fais $a = new A; alors php va regarder si machin\truc\A existe. S'il ne trouve pas la classe, il appelle l'autoload avec machin\truc\A comme nom de classe.
    Si machin était un alias pour, disons, autre\bidule, alors autoload recevra autre\bidule\machin\truc\A comme nom de classe.

    C'est ce genre d'autoloading que j'utilise:
    http://www.developpez.net/forums/d76...ng-namespaces/
    Plusieurs autoloaders basés sur ce principe sont registrés auprès de spl_autoload_register(). En fait, une registration par racine de namespace:

    Genre si j'ai un namespace framework (et possiblement des sous ramifications framework\blah\bleh..), j'aurais un autoloader pour framework, qui est un composant du framework.

    Si j'ai un autre namespace myself\machin\truc, j'enregistre un autoloader similaire qui gère uniquement myself et ses descendants.

    Je n'ai rien dans l'include_path parceque j'en n'ai pas besoins. Il y a un mapping directe entre les branches des namespaces et les répertoires du filesys. Je pense que c'est un bon compromis en terme de performance (aucun lookups) et de facilité d'utilisation.

  10. #70
    Membre éclairé
    Avatar de Floréal
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    456
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 456
    Points : 849
    Points
    849
    Par défaut
    Ah oui, c'est vraiment pas bête. Je n'avais pas envisagé les choses sous cet angle là. Ce que tu propose est intéressant et me plait beaucoup.
    Ancien membre du projet "Le Dernier Âge".

  11. #71
    Membre émérite
    Avatar de gene69
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 769
    Détails du profil
    Informations personnelles :
    Localisation : France

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

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 769
    Points : 2 446
    Points
    2 446
    Par défaut
    La question est "que pensez vous de php5.3"?

    ma réponse est que du bien !

    • d'abord je me moque des histoires de syntaxes compliquées, logiques ou pas (quoi que je fasse des fonctions anonymes depuis peu)
    • parce que ya plein de fonction qui n'étais pas native windows et qui le sont devenue
    • parce que j'ai eu 0 problème pour faire passer des scripts d'un moteur php 4.3 à 5.3.1, hormis la mode qui veut qu'on ne fait plus de magic quote ni de balise brève.
    • parce que j'ai trouver des trucs sympa comme __DIR__ et pour moi qui me limite a des syntaxes triviale, c'est génial.
    PHP fait nativement la validation d'adresse électronique .
    Celui qui a inventé mysql_connect(...) or die() est déjà mort plusieurs fois.

    Utilisez le bouton résolu!

  12. #72
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2011
    Messages : 27
    Points : 19
    Points
    19
    Par défaut
    Le PHP est un très bon langage informatique, il ne lui manque plus que la gestion de l'UNICODE, d'intégrer des API standards sans passer par des framework tierce (ex: génération de document PDF), et d'être un peu plus rapide à l'exécution.

Discussions similaires

  1. Réponses: 55
    Dernier message: 10/06/2011, 11h57
  2. [Internals] Que pensez-vous des Fermetures en PHP ?
    Par Yogui dans le forum Langage
    Réponses: 22
    Dernier message: 14/02/2010, 06h49
  3. Que pensez-vous des générateurs de doc PHP ?
    Par Nonothehobbit dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 64
    Dernier message: 10/07/2007, 10h17
  4. [Delphi for PHP] Que pensez vous de Delphi for PHP
    Par ph_anrys dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 11/04/2007, 23h01
  5. Que pensez vous de delphi pour PHP
    Par aityahia dans le forum Delphi
    Réponses: 15
    Dernier message: 05/04/2007, 23h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo