je viens de me lancer dans la POO, et j'ai un petit problème. Je voudrais savoir comment utiliser une class dans une autre class.
Je m'explique, j'ai une class "maClass" et une autre "db" (c'est la class ezSQL qui permet de gérer facilement une db).
Dans ma class "maClass" je veux utiliser la class "db" pour effectuer une requtte SQL, j'ai donc essayer de mettre ces 2 bout de code dans dans "maClass", mais ni l'un ni l'autre ne marche:
db::get_var()
$db->get_var() ($db est instancié à chaque haut de page)
J'ai aussi essayé d'instancier $db dans la méthode "__construct" de "maClass", mais ca ne marche pas non plus.
J'ai résolu mon problème, mais je voulais savoir si c'était pas possible de définir une class une fois pour toute, et qu'elle soit accessible dans toutes les autres class.
Il s'agit d'un class de gestion de MySQL, or je n'ai qu'un serveur, et qu'une seule base, donc ca me saoul de redéfinir une nouvelle instance dans chaque class.
Tu peux envisager différentes solutions pour cela :
une classe abstraite agrégeant la class bdd : il te suffit de faire hériter tes classes avec celle-ci pour avoir acces à l'attribut de bdd.
Exemple :
<?php
abstractclassA{
protected$bdd;
protectedfunction__construct(){
$this->bdd=newbdd();
}
}
classBextendsA{
function__construct(){
parent::__construct();
}
functionselect($query){
$this->bdd->query($query);
}
}
?>
- Définir une fabrique statique
<?php
classA{
publicstaticfunctiongetSqlObj(){
returnnewbdd();
}
}
classB{
functionquery($query){
$bdd=A::getSqlObj();
// utiliser l'objet ici
}
}
?>
Passer l'objet en argument soit dans le constructeur afin de l'agregé, soit dans les méthodes ou tu as besoin de ton objet