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 :

[POO] Héritage et attributs


Sujet :

Langage PHP

  1. #1
    Expert éminent sénior
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 803
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 803
    Points : 34 071
    Points
    34 071
    Billets dans le blog
    14
    Par défaut [POO] Héritage et attributs
    Bonjour,
    Peu habitué encore au fonctionnement du PHP Objet et de l'extension des classes, je suis un peu étonné par ce que m'affiche un écho d'une variable.

    Il s'agit de code figurant dans OBM.

    1er morceau de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     $auth=new$feature["auth"];
    
    $auth->start();
    $feature["auth"] valant 'OBM_Challenge_Auth', la variable $auth est donc appelée à recevoir une instance de la classe OBM_Challenge_Auth.
    C'est bien ça ?

    2ème morceau de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    class OBM_Challenge_Auth extends Auth {
     
      var $lifetime       =  86400;
      var $magic          = "Simsalabim";  // Challenge seed
      var $database_class = "DB_OBM";
      var $database_table = "UserObm";
    La classe OBM_Challenge_Auth "étend" la classe Auth. Ca veut bien dire que :
    - La classe OBM_Challenge_Auth récupère les propriétés et fonctions de la classe Auth ?
    - Si des fonctions et propriétés de OBM_Challenge_Auth existent aussi dans Auth, ce sont celles de OBM_Challenge_Auth qui sont utilisées ?

    3ème morceau de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    class Auth {
      var $lifetime = 0;         // Auth lifetime (seconds, 0=never expires)
      var $refresh = 0;
    On voit que $lifetime existe à la fois dans Auth (valeur 0) et dans OBM_Challenge_Auth (valeur 86400). $lifetime devrait bien être initialisée avec la valeur 86400 ?

    4ème morceau de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
      function start() {
        $cl = $this->cancel_login;
        global $obm, $$cl, $lifetime;
     
        //echo "<br>***AUTH-start - obm_uid=$obm[uid]";
     
        // OBM : We set the auth lifetime with the global session lifetime (if set)
        // It is not set at the login (cause page_open before session_load_global)
        if ($lifetime) $this->lifetime = $lifetime;
    Cette fonction start() est dans la classe Auth mais pas dans OBM_Challenge_Auth.
    Si je mets un echo $lifetime avant ou après la dernière ligne, rien ne s'affiche !
    Ne devrait-il pas s'afficher la valeur de $lifetime, soit 86400 ?

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    27
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 27
    Points : 34
    Points
    34
    Par défaut
    Hello,

    Pour le 1er , tu as tout à fait raison, la class non étendue n'hérite pas des valeurs de la classe étendue.
    Donc $lifetime devrait être égale à 86400

    Sauf que dans la méthode start() dans Auth, tu redéfinie $this -> lifetime avec $lifetime qui doit être défini autre part puisqu'il on va chercher la valeur avec global. Ce qui est en POO n'est pas top.

    Bon courage ^^.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    625
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 625
    Points : 822
    Points
    822
    Par défaut
    Citation Envoyé par CinePhil Voir le message
    Bonjour,
    Peu habitué encore au fonctionnement du PHP Objet et de l'extension des classes, je suis un peu étonné par ce que m'affiche un écho d'une variable.

    Il s'agit de code figurant dans OBM.

    1er morceau de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     $auth=new$feature["auth"];
    
    $auth->start();
    $feature["auth"] valant 'OBM_Challenge_Auth', la variable $auth est donc appelée à recevoir une instance de la classe OBM_Challenge_Auth.
    C'est bien ça ?
    Oui.

    2ème morceau de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    class OBM_Challenge_Auth extends Auth {
     
      var $lifetime       =  86400;
      var $magic          = "Simsalabim";  // Challenge seed
      var $database_class = "DB_OBM";
      var $database_table = "UserObm";
    La classe OBM_Challenge_Auth "étend" la classe Auth. Ca veut bien dire que :
    - La classe OBM_Challenge_Auth récupère les propriétés et fonctions de la classe Auth ?
    Oui.
    - Si des fonctions et propriétés de OBM_Challenge_Auth existent aussi dans Auth, ce sont celles de OBM_Challenge_Auth qui sont utilisées ?
    Si tu travailles sur une instance de OBM_Challenge_Auth (donc dans le cas que tu nous a présenté au départ), Oui.
    Si tu travailles sur une instance de Auth, alors ce seront les méthodes et les membres de Auth qui seront appelés.

    3ème morceau de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    class Auth {
      var $lifetime = 0;         // Auth lifetime (seconds, 0=never expires)
      var $refresh = 0;
    On voit que $lifetime existe à la fois dans Auth (valeur 0) et dans OBM_Challenge_Auth (valeur 86400). $lifetime devrait bien être initialisée avec la valeur 86400 ?
    Dans une instance de OBM_Challenge_Auth, oui.
    4ème morceau de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
      function start() {
        $cl = $this->cancel_login;
        global $obm, $$cl, $lifetime;
     
        //echo "<br>***AUTH-start - obm_uid=$obm[uid]";
     
        // OBM : We set the auth lifetime with the global session lifetime (if set)
        // It is not set at the login (cause page_open before session_load_global)
        if ($lifetime) $this->lifetime = $lifetime;
    Cette fonction start() est dans la classe Auth mais pas dans OBM_Challenge_Auth.
    Si je mets un echo $lifetime avant ou après la dernière ligne, rien ne s'affiche !
    Ne devrait-il pas s'afficher la valeur de $lifetime, soit 86400 ?
    Le mot clé global ... $lifetime ... récupère la variable $lifetime (logique) déclarée dans au niveau global de ton script (c'est à dire hors de toute définition de fonction, classe ou méthode). Si cette variable n'est pas définie, elle est initialisée à null et echo null n'affiche rien.
    si tu veux afficher le $lifetime défini par ta classe, il faut que tu utilise $this->lifetime

  4. #4
    Expert éminent sénior
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 803
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 803
    Points : 34 071
    Points
    34 071
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par Petibidon Voir le message
    Le mot clé global ... $lifetime ... récupère la variable $lifetime (logique) déclarée dans au niveau global de ton script (c'est à dire hors de toute définition de fonction, classe ou méthode). Si cette variable n'est pas définie, elle est initialisée à null et echo null n'affiche rien.
    si tu veux afficher le $lifetime défini par ta classe, il faut que tu utilise $this->lifetime
    OK compris.
    $lifetime n'existe jusqu'à ce point de déroulement du programme que dans ces deux classes donc logique que ça n'affiche rien.

    echo $this->lifetime affiche bien 86400.

    Merci, je dormirai moins bête ce soir !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 8
    Dernier message: 13/10/2008, 21h26
  2. [POO] Héritage et visibilité des attributs : pas de "protected" en JS ?
    Par Hervé Saladin dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 27/11/2007, 16h44
  3. [POO] Objet en attribut d'un objet
    Par Tchinkatchuk dans le forum Langage
    Réponses: 7
    Dernier message: 06/12/2005, 11h00
  4. [POO-Héritage] Appel du constructeur en PHP4.3.2
    Par raoulchatigre dans le forum Langage
    Réponses: 4
    Dernier message: 28/11/2005, 16h37
  5. [POO] Heritage d'attribut statique surchargé !
    Par Jaxofun dans le forum Langage
    Réponses: 25
    Dernier message: 16/08/2005, 10h01

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