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] Constructeur avec paramètres et héritage


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Octobre 2006
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 27
    Par défaut [POO] Constructeur avec paramètres et héritage
    Salut salut,
    (Dur de faire un titre claire, sorry)

    J'ai un cas d'école qui ressemble à ça :

    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    class Connection {
    	protected $link;
        private $server, $username, $password, $db;
     
        public function __construct($server, $username, $password, $db)
        {
            $this->server = $server;
            $this->username = $username;
            $this->password = $password;
            $this->db = $db;
    		$this->connect();
        }
     
        private function connect()
        {
            $this->link = mysql_connect($this->server, $this->username, $this->password);
            mysql_select_db($this->db, $this->link);
        }
     
    }
    class actus extends Connection {
     
    	public function __construct(){}
     
    	public function getAllActus(){
    		// kebab		
     
    	}
     
    }
     
    $Con=new Connection($datab_host,$datab_user,$datab_pwd,$datab_name);
     
    $actus=new actus();
    print_r($actus);
    Il a bien la structure de l'objet mais pas les valeurs que j'ai passé.
    Je ne dis pas que c'est pas normal hein, vu que mon enfant à un constructeur je crois que c'est "normal" non?
    La question c'est que je voudrais savoir comment faire les choses proprement parce que si je n'ai pas de constructeur dans mon enfant, je choppe bien tout mais alors il faudra que je fasse un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $actus=new actus($datab_host,$datab_user,$datab_pwd,$datab_name);
    et je trouve ça 1) lourd et 2) sémantiquement erroné

    J'ai aussi la possibilité d'instancier mon objet Connection sans param et d'avoir une méthode connect qui elle attend à manger les params de connexion.

    J'espère que c'est clair parce que même moi je me rends compte que c'est de la bouillie.
    Merci pour vos éclaircissement bien nécessaires

  2. #2
    Membre Expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Par défaut
    Bonjour,

    D'un point de vue sémantique la classe actus n'a rien à voir avec la classe Connection, en quoi actus hériterais de Connection ?

    Il faudrait plutot donner à actus une propriété Connection.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    class Actus{
        private $connection;
        function __construct(){
        }
     
        public function setConnection($connection){
            $this->connection = $connection;
        }
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $Actus = new Actus();
    $Actus->setConnection(new Connection($datab_host, $datab_user, $datab_pwd, $datab_name));
    $Actus->getAll();

  3. #3
    Membre averti
    Inscrit en
    Octobre 2006
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 27
    Par défaut
    Bonjour ThomasR et merci pour ta réponse!
    En fait, j'ai tenté de faire du mapping object-relationelle , je dis bien tenté
    Du coup, je ne trouvais pas ça forcément idiot de considéré la base de donnée (la classe.db) comme la mère et chaque table (type class.actus donc) comme des enfants.
    Concrétement j'ai une méthode dans ma classe mère qui me permet de faire des requetes SQL proprement, qui choppe les erreurs etc.
    Voilà pourquoi, instinctivement j'ai pris le parti de faire de l'héritage...
    Il y a aussi une autre raison qui fait que je voudrais éviter ta solution c'est que sur certaines pages j'ai besoin d'instancier plusieurs objet/table (genre auteur & actus)
    Du coup je me retrouve avec n connection, je ne pense pas que cela soit propre (même à considérer un test pour voir si la connexion est déjà crée)

    M'enfin, j'ai bien conscience que "Code le dimanche, code comme un manche"

    Ton avis est le bienvenu

  4. #4
    Membre chevronné Avatar de goodpz
    Profil pro
    Inscrit en
    Février 2007
    Messages
    475
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 475
    Par défaut
    Ce qui se fait de plus en plus, c'est de mettre la connection en tant que membre static de la classe mère. Tu as donc bien une hiérarchie de classes et qu'une seule connection.

  5. #5
    Membre Expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Par défaut
    Bonsoir,
    Il y a aussi une autre raison qui fait que je voudrais éviter ta solution c'est que sur certaines pages j'ai besoin d'instancier plusieurs objet/table (genre auteur & actus)
    Du coup je me retrouve avec n connection, je ne pense pas que cela soit propre (même à considérer un test pour voir si la connexion est déjà crée)
    Pas forcement, il te suffit de passer le meme objet Connection en propriétés de tes différentes classes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    $conn = new Connection(...);
     
    $actus = new actus();
    $actus->setConnection($conn);
    while($actus->next()){
        echo $actus->current('title');
    }
     
    $users = new users();
    $users->setConnection($conn);
    // etc...

Discussions similaires

  1. question sur constructeur avec paramètre
    Par Invité dans le forum Débuter
    Réponses: 3
    Dernier message: 15/11/2010, 11h31
  2. Singleton constructeur avec paramètres
    Par ancrou dans le forum Langage
    Réponses: 5
    Dernier message: 23/06/2009, 11h20
  3. [C#]Constructeur avec paramètre dans designer
    Par ClaudeBg dans le forum Windows Forms
    Réponses: 1
    Dernier message: 15/02/2009, 19h18
  4. [Framework] [Core] bean et constructeur avec paramètre
    Par robert_trudel dans le forum Spring
    Réponses: 3
    Dernier message: 10/07/2008, 13h52
  5. [EJB Session] Constructeur avec paramètres ?
    Par DevTeam_ dans le forum Java EE
    Réponses: 23
    Dernier message: 07/05/2008, 12h07

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