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 vs classe dans une classe


Sujet :

Langage PHP

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 8
    Points : 7
    Points
    7
    Par défaut [POO] Héritage vs classe dans une classe
    Bonjour bonjour
    mon premier post , vi habituellement je trouve en cherchant ou dans des tutoriels, mais là la question que je me pose est un peu floue pour une recherche ( j'ai tenté quand même )... Et il est probable que la réponse tienne en deux lignes, donc je poste.

    Je cherche à écrire une classe pour intéragir avec une bdd mysql mais de façon la plus simple possible ( et d'une façon très adaptée à mon problème, je m'en fou pas mal si je limite les possibilités d'origine ). Au départ, j'ai fait hériter ma classe de la classe mysqli. Seul pépin, je voulais que le constructeur de ma classe aille chercher toute seule lors de l'instanciation le server/user/pwd/base dans des variables globales. Naïvement pour moi çà donnait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    class bddConnection extends mysqli {	
    	function __construct() {
    		parent::__construct($GLOBALS['sqlServer'], $GLOBALS['sqlUser'], $GLOBALS['sqlPwd'], $GLOBALS['sqlBase']);
    	}
    }
    Evidemment, çà ne marche pas, je suppose que le constructeur ne recoive pas en paramètres les variables qu'on utilise en faisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $aga = new mysqli($tralala, $pouet, etc... );
    Comment ces paramètres sont transmis alors ?

    Comme solution, à la place de l'héritage, j'ai pensé à une instanciation de mysqli DANS l'instance de ma classe perso :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    class bddConnection {
    	private $tralala; // ou public, pas le pb
    	function __construct() {
    		$this->tralala = new mysqli($GLOBALS['sqlServer'], $GLOBALS['sqlUser'], $GLOBALS['sqlPwd'], $GLOBALS['sqlBase']);
    	}
    }
    Suis-je obligé de faire comme cela ou c'est juste que je m'y prend mal pour mon héritage ?
    Autre chose me perturbe : imaginons que l'on veuille hériter d'une classe, mais faire de toutes les méthodes & propriétés de cette classe des méthodes & propriétés privées dans la sous-classe. Il me semble que c'est possible dans d'autres langage ( mais en php ??? ). Mais quel est l'intérêt par rapport à ma "solution" juste au-dessus ? Je me doute qu'il y en a un, mais a priori je ne vois pas... Même au niveau de la gestion en mémoire, pas de gros avantage pour l'héritage a priori non ?

    Je commence complètement en prog objet, mes connaissances se limitent à quelques lectures, alors si les réponses à mes questions se trouvent dans quelque chose que j'aurais dû lire, et que le post est inutil, désolé, mea culpa, merci de m'indiquer ce qu'il me reste à lire .
    J'espère avoir été clair, merci pour ceux qui auront suivi jusqu'au bout...

  2. #2
    Invité
    Invité(e)
    Par défaut
    salut, et bienvenue dans cette communauté

    en ce qui me concerne je pense que l'héritage est la solution à choisir pour ton cas. je ne me base pas sur ces critères techniques (gestion de la mémoire, etc.) mais plutôt sur de la sémantique : tu veux faire une classe de connexion à MySDL, en te basant sur MySQLi, qui est une classe de connexion MySQL. On a là la définition de l'héritage, CQFD.

    quant à ton probleme de transmission de parametre, il semblerait plus logique de faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    function __construct($server, $user, $pwd, $base) {
    	parent::__construct($server, $user, $pwd, $base);
    }
    et d'appeler ce constructeur en lui passant tes variables globales en parametres... en tous cas perso j'ai la même chose et ça marche

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 8
    Points : 7
    Points
    7
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    class test extends mysqli {
    	function __construct() {
    		parent::__construct($GLOBALS['sqlServer'],$GLOBALS['sqlUser'],$GLOBALS['sqlMdp'],$GLOBALS['sqlBase']);
    	}
    }
    marche en fait très bien... C'est chiant, mon problème était pas du tout là et je me suis pris la tête là dessus. Je vais repartir sur çà, donc...
    Pour mon histoire d'héritage remplaçable par une instance de classe je me pencherait sur la question plus tard çà sera probablement plus clair...
    Merci bien en tout cas, je crois que j'aurais même pas ré-essayé sinon en plus :-)

  4. #4
    Membre expérimenté

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 278
    Points : 1 639
    Points
    1 639
    Par défaut
    Et pourquoi n'utilises-tu pas PDO ?
    A priori, c'est vraiment l'avenir des relations php/bdd, plus que mysqli.

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 8
    Points : 7
    Points
    7
    Par défaut
    Pour une excelente raison : jamais entendu parlé ! Je vais jeter un coup d'oeil à çà merci =).

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

Discussions similaires

  1. Poo : utiliser une classe dans une classe ?
    Par devoluti0n dans le forum Langage
    Réponses: 2
    Dernier message: 28/10/2010, 17h03
  2. Réponses: 1
    Dernier message: 25/10/2007, 18h04
  3. [POO] Une Classe dans une Classe. C'est possible?
    Par FrankOVD dans le forum Langage
    Réponses: 2
    Dernier message: 18/05/2006, 22h02
  4. [POO] Utilisation d'une classe dans une classe !
    Par Okinou dans le forum Langage
    Réponses: 3
    Dernier message: 16/02/2006, 14h34
  5. Une classe dans une classe...
    Par Baquardie dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 30/09/2005, 19h36

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