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 :

Alimentation d'un objet par héritage [POO]


Sujet :

Langage PHP

  1. #1
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    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 818
    Billets dans le blog
    14
    Par défaut Alimentation d'un objet par héritage
    Bonjour,

    Je ne sais pas si une montée de version de PHP a foutu la merde ou si c'est à force de bidouiller mon programme que ça ne fonctionne plus ou s'il y a un truc avec l'héritage qui m'échappe mais j'ai un gros souci à vous soumettre !

    Suite à saisie d'un formulaire, je récupère, entre autres, ces informations en $_POST :
    [civilite] => 1
    [nomUsuel] => TEST
    [prenomUsuel] => Prénom-Test
    J'ai une structure de classes modèles en cascade :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    class Personne extends Modele
     
    class PersonnePhysique extends Personne
     
    class Candidat extends PersonnePhysique
     
    class Etudiant extends Candidat
    Du coup, les constructeurs des différentes classes appellent le constructeur de la classe parente. Par exemple, en remontant la chaîne décrite ci-dessus j'ai ça dans la classe Etudiant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    	/**
    	 * Constructeur
    	 * @param integer $pph_id
    	 * @param string $pph_nom_usuel
    	 * @param prénom usuel $pph_prenom
    	 * @param Civilite $pph_civilite
    	 */
    	public function __construct($pph_id = null, $pph_nom_usuel = null, $pph_prenom = null, $pph_civilite = null)
    	{
    		parent::__construct($pph_id = null, $pph_nom_usuel = null, $pph_prenom = null, $pph_civilite = null);
    	}
    J'ai ça dans la classe Candidat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    	/**
    	 * Constructeur
    	 * @param integer $pph_id identifiant de la personne
    	 * @param string $pph_nom_usuel nom usuel de la personne physique
    	 * @param string $pph_prenom prénom usuel de la personne physique
    	 * @param Civilite $pph_civilite civilité de la personne physique
    	 */
    	public function __construct($pph_id = null, $pph_nom_usuel = null, $pph_prenom = null, $pph_civilite = null)
    	{
    		parent::__construct($pph_id, $pph_nom_usuel, $pph_prenom, $pph_civilite);
    	}
    Et ça dans la classe PersonnePhysique :
    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
    20
    21
    		/**
    	 * Constructeur
    	 * @param integer $pph_id 			: Identifiant de la personne 
    	 * @param string $pph_nom_usuel 	: Nom usuel de la personne
    	 * @param string $pph_prenom 		: Prénom usuel de la personne
    	 * @param Civilite $pph_civilite 	: Civilité de la personne 
    	 */
    	public function __construct($pph_id = null, $pph_nom_usuel = null, $pph_prenom = null, $pph_civilite = null)
    	{
    		parent::__construct($pph_id, $pph_nom_usuel);
     
    		if(!is_null($pph_prenom))
    		{
    			$this->setPrenom($pph_prenom);
    		}
     
    		if(!is_null($pph_civilite))
    		{
    			$this->setCivilite($pph_civilite);
    		}
    	}
    Dans le code qui traite le formulaire, j'ai ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $objEtudiant = new Etudiant(null, trim($_POST['nomUsuel']), trim($_POST['prenomUsuel']), new Civilite(intval($_POST['civilite'])));
    Si je ne me trompe dans ma compréhension du phénomène, Instancier l'étudiant en lui passant le nom usuel, le prénom usuel et la civilité devrait lancer en cascade les différents constructeurs et remplir mon objet, non ?

    Juste après ça, j'ai affiché en débogage mon objet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    echo "<pre>";
    print_r($objEtudiant);
    echo "</pre>";
    exit;
    Mais malheureusement, il est vide !
    Application\Model\Etudiant Object
    (
    [etuNumero:Application\Model\Etudiant:private] =>
    [etuAnneeEntree:Application\Model\Etudiant:private] =>
    [etuPhoto:Application\Model\Etudiant:private] =>
    [etuPieceIdentite:Application\Model\Etudiant:private] =>
    [etuAutorisationPhoto:Application\Model\Etudiant:private] =>
    [etuAttestationSecu:Application\Model\Etudiant:private] =>
    [etuAutorisationIzly:Application\Model\Etudiant:private] =>
    [etuRib:Application\Model\Etudiant:private] =>
    [canIdSexe:Application\Model\Candidat:private] =>
    [canPaysNationalite:Application\Model\Candidat:private] =>
    [canVilleNaissance:Application\Model\Candidat:private] =>
    [canNomNaissance:Application\Model\Candidat:private] =>
    [canDateNaissance:Application\Model\Candidat:private] =>
    [canAutresPrenoms:Application\Model\Candidat:private] =>
    [canINE:Application\Model\Candidat:private] =>
    [pph_prenom:Application\Model\PersonnePhysique:private] =>
    [pph_civilite:Application\Model\PersonnePhysique:private] =>
    [personneId:Application\Model\Personne:private] =>
    [personneNomUsuel:Application\Model\Personne:private] =>
    )
    Qu'est-ce que j'ai loupé ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  2. #2
    Membre Expert
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2012
    Messages
    631
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2012
    Messages : 631
    Par défaut
    bonjour,

    L'appel au constructeur parent de Etudiant écrase les paramètres qui lui sont passés car définis à null. il suffit d'enlever null au constrcteur appelant dans Etudiant.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    //Etudiant.php
     
    public function __construct($pph_id = null, $pph_nom_usuel = null, $pph_prenom = null, $pph_civilite = null)
    {
        parent::__construct($pph_id , $pph_nom_usuel , $pph_prenom , $pph_civilite );
    }
    Après le constructeur étudiant ayant exactement la même signature que celui de son parent(candidat), il(le concstruteur) devient inutile de le définir car par héritage il est implicitement définit dans Etudiant.en gros tout mon bloc de code est inutile.

  3. #3
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    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 818
    Billets dans le blog
    14
    Par défaut
    Arf ! Oui, bien sûr ! Mea culpa !
    Merci !
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

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

Discussions similaires

  1. Alimentation d'un objet par une variable string
    Par Harry Covair dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 17/08/2013, 00h47
  2. [2.x] Héritage - Changer la classe de mon objet par sa sous-classe
    Par sly_web2 dans le forum Symfony
    Réponses: 1
    Dernier message: 04/09/2012, 11h08
  3. Comment créer un composant orienté objet par héritage ?
    Par Amenofis dans le forum Composants VCL
    Réponses: 4
    Dernier message: 12/12/2007, 10h21
  4. retour tableau d'objets par service web axis jboss
    Par TrollMaster dans le forum XML/XSL et SOAP
    Réponses: 6
    Dernier message: 27/11/2005, 21h45
  5. [ JSP ][ Débutant ] Passage d'objet par un forward
    Par captainpouet dans le forum Servlets/JSP
    Réponses: 5
    Dernier message: 08/04/2004, 10h33

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