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 :

Besoin d'aide sur différentes questions.


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2010
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2010
    Messages : 11
    Points : 10
    Points
    10
    Par défaut Besoin d'aide sur différentes questions.
    Salut,

    Je travaille en ce moment sur un framework maison, c'est très enrichissant comme exercice.
    Mais j'ai plusieurs questions auxquelles j'aimerais avoir des réponses afin d'éclaircir le chemin que j'emprunte.

    1°) Je ne saisis pas très bien la différence entre un 'dispatcher' et un 'router' ?

    2°) Quelle est la différence entre un 'value object' et un 'popo' ?

    3°) J'aimerais récuperer une partie d'un mot ex: ArticleMapper => Article ; AuthorMapper => Author
    J'ai fait ça: str_replace(substr('ArticleMapper', -6,6) , '' , 'ArticleMapper') ;
    Est-ce une bonne façon de faire ou existe-t-il une meilleur solution ?

    4°) J'ai les classes B et C qui héritent de la classe A et j'aimerais que la classe A contient une méthode qui retourne un tableau contenant les attributs privées de ses enfants. Quelqu'un aurait une piste à me donner ?

    Merci d'avance pour votre aide

  2. #2
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    1) aucune idée, mais si tu obtiens la réponse, ça m'intéresse.

    2) qu'est-ce qu'un popo ? (pasque bon, les resultats google correspondant sont... )

    3) Si le motif c'est toujours MachinMapper, il y a plus simple :
    soit substr_replace('ArticleMapper', '', -6); , soit str_replace('Mapper', '', 'ArticleMapper);.

    4) la fonction get_object_vars est ton amie !

  3. #3
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2004
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2004
    Messages : 108
    Points : 175
    Points
    175
    Par défaut
    Bonjour ,

    Je ne sais pas si ce que je vais répondre est très juste mais essayons :

    1)
    Comme je le vois un routeur va modifier la requête reçus pour la rendre compréhensible par le code : http://yyy.com/article_read_1_1_2013.html va passer par le routeur pour devenir http://yyy.com/index.php?controleur=...&date=1/1/2013.

    Cette modification peut alors créer un couple Contrôleur/Action, ce couple est envoyé dans un dispatcheur qui est sensé, selon les données reçus, dirigé la demande de l'utilisateur vers le bon code.

    2)
    Popo indique The Plain Old PHP Object qui vient de java avec POJO je crois. Littéralement : un bon vieux objet php.
    Un object value est un object qui implémente un POPO (marrant dit comme cela) afin d'étendre les possibilités de ce dernier.

    3)
    Pour la récupération je pense que le mot avant "Model" est de longueur variable donc le str_replace me parait plus efficace à ce niveau.
    Sinon un petit regex du genre ([A-Z][a-z]*) peut te permettre de récupérer toute les parties de la variable dans un tableau.

    4) Voir une réponse plus haut .

  4. #4
    Membre à l'essai
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2010
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2010
    Messages : 11
    Points : 10
    Points
    10
    Par défaut
    Merci Cérila, d'avoir pris le temps de répondre à mes interrogations

    1°) Toujours rien trouver de bien concret là-dessus

    2°) POPO pour Plain Old PHP Object c'est l'équivalent d'un POJO (Plain Old Java Object) en Java. D'après ce que j'ai compris un POPO ou POJO est un objet simple qui n'hérite ou n'implémente rien. Il contient simplement des attributs privés qui sont accessibles via les accesseurs et mutateurs et aucune autre méthode.

    3°) Merci c'est une factorisation de ma méthode avec les deux fonctions.

    4°) Je connais la fonction get_object_vars. Mais le problème c'est que j'ai une classe A et une classe B qui hérite de A, B contient des attributs privés et je voudrais que A sache retourner les attributs de B, bien sur lorsque j'instance B qui hérite de A, mais je n'y arrive pas :/

    Merci à toi aussi TERRA126

    1°) Donc si je te suis, si url rewriting est désactivé alors développer un router n'est pas nécessaire ?

    2° et 3°) D'accord merci

    4°) Voir ma réponse plus haut :p

  5. #5
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2004
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2004
    Messages : 108
    Points : 175
    Points
    175
    Par défaut
    En fait l'url rewriting d'apache va te servir de routeur . En gros il va associer une "jolie" url avec une requête composé de variable passable à php. Dans ces variables on retrouve souvent un nom de module et une action (ainsi que tout ce que tu veux faire passer à ton code).

    Tout ceci est ensuite envoyé dans le dispatcheur qui va faire son travail. Après j'ai cru comprendre que l'on pouvait développer un routeur en php directement, mais je dois bien avouer que celui d'apache me suffit pour ce que j'en fait .

    Pour le dernier point, si les attributs sont en "private" dans les deux classes tu ne pourras pas y accéder via une méthode de A. Il faut au moins que les attributs de B soit en protected. Dans le cas contraire, en effet, tu ne pourras pas accéder aux propriétés des deux .

  6. #6
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Effectivement, TERRA a raison :
    Citation Envoyé par php.net
    'accès aux éléments protégés (protected) est limité à la classe elle-même, ainsi qu'aux classes qui en héritent, et à ses classes parentes
    Donc pour que ça fonctionne, il faut que les attributs soient en visibilité protected.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    class A {
        protected $champDeA = '2';
     
        public function getAttributs() {
            return get_object_vars($this);
        }
    }
     
    class B extends  A {
        protected $champDeB = '3';
    }
     
    $b = new B();
    print_r($b->getAttributs()); // retourne : Array ( [champDeB] => 3 [champDeA] => 2 )

  7. #7
    Membre à l'essai
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2010
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2010
    Messages : 11
    Points : 10
    Points
    10
    Par défaut
    Très bien merci beaucoup à vous deux.
    C'est embêtant pour la question 4°) car ça sous-entend que la classe est dérivable.

  8. #8
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Pour les attributs private, c'est possible en surchargeant la méthode (mais ça commence à être capilotracté)
    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
    17
    18
    19
    class A {
        private $champDeA = '2';
     
        public function getAttributs() {
            return get_object_vars($this);
        }
    }
     
    class B extends  A {
        private $champDeB = '3';
     
        public function getAttributs() {
            $return = parent::getAttributs();
            return array_merge($return, get_object_vars($this));
        }
    }
     
    $b = new B();
    print_r($b->getAttributs()); // retourne Array ( [champDeA] => 2 [champDeB] => 3 )

  9. #9
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2004
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2004
    Messages : 108
    Points : 175
    Points
    175
    Par défaut
    Une autre méthode que celle de Celira : tu met tout "private" et tu crée seulement des getters en "protected". Tu te donnes une règle afin de pouvoir les reconnaitre de toute les autres méthodes et tu effectues un "get_class_methods" au lieu d'un "get_vars_object".

    Code php : 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
    17
    18
    19
    20
    21
    22
    23
    24
     
    class A {
            private $messageA = "classA";
     
            protected function get_messageA() {
                    return $this->messageA;
            }
     
            public function ret() {
                    return get_class_methods($this);
            }
     
    }
     
    class B extends A {
            private $messageB = "classB";
     
            protected function get_messageB() {
                    return $this->messageB;
            }
    }
     
    $a = new B();
    print_r($a->ret());

    Cela demande plus de code surtout qu'il va te falloir appeler les méthodes pour en obtenir la valeur mais tu as un bon contrôle de ce qui est rendus.

    Il existe quasiment toujours un moyen de s'en sortir mais bon après on arrive avec un code assez tiré par les cheveux xD.

Discussions similaires

  1. Besoin d'aide sur une question
    Par Yasiño dans le forum Langage SQL
    Réponses: 5
    Dernier message: 19/11/2012, 21h08
  2. aide sur une Question (..de spécialité différente)
    Par samgan dans le forum Langage SQL
    Réponses: 7
    Dernier message: 18/11/2010, 14h35
  3. C++, besoin d'aide sur divers questions
    Par mensoif dans le forum C++
    Réponses: 5
    Dernier message: 29/05/2008, 16h47
  4. [intermedia] besoin d'aide sur script PL/SQL
    Par SteelBox dans le forum PL/SQL
    Réponses: 8
    Dernier message: 05/01/2004, 19h59
  5. [CR] besoin d'aide sur les formules
    Par GuillaumeDSA dans le forum Formules
    Réponses: 4
    Dernier message: 10/07/2003, 12h19

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