Utiliser une class dans une autre class
Slt tlm,
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.
Merci bp!
+++
Ben si tu instancies un objet dans ta classe, cela fonctionne.
T'as du merder un truc.
Exemple :
<?php
class pom {
var $toto = 3;
}
class blu {
function polom() {
$obj = new pom();
echo $obj->toto;
}
}
$pouf = new blu();
$pouf->polom();
?>
Fonctionne sans soucis.
En gros, tu ne dois pas instancier $db dans le haut de ta page car il ne sera pas accessible dans ta classe.
OK merci, ben je vais revoir ca alors!
+++
Et je rajouterais que tu devrais lire le mode d'emploi de PHP, à la section POO, histoire de comprendre ce que tu fais ;)
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
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.
Merci bp!
+++
up!
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
abstract class A{
protected $bdd;
protected function __construct(){
$this -> bdd = new bdd();
}
}
class B extends A{
function __construct(){
parent::__construct();
}
function select($query){
$this -> bdd -> query($query);
}
}
?>
- Définir une fabrique statique
<?php
class A{
public static function getSqlObj(){
return new bdd();
}
}
class B{
function query($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
<?php
class A{
private $bdd;
public function __construct(Bdd $bdd){
$this -> bdd = $bdd;
}
}
class A{
public function __construct(){
}
public function doSomething(Bdd $bdd){
$bdd -> query(...);
}
}
?>
echo ’16i[q]sa[ln0=aln100%Pln100/snlbx]sbA0D4D465452snlbxq’|dc
J'irais plus loin en proposant l'implémentation du singleton. Par exemple :
<?php
class ezSQL
{
protected function __construct()
{
}
static protected $instance ;
static public function get()
{
if(!self::$instance)
self::$instance = new self ;
if(!self::$instance)
throw new Exception("Sad sick world !") ;
return self::$instance ;
}
/** reste de la classe
*/
}
?>
On l'utiliserais ainsi :
<?php
try
{
$db = zeSQL::get() ;
}
catch($e)
{
/** Gestion de l'exception */
}
/** utilisation de la classe */
?>
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
Ecrire un message
Votre message vient d'être créé avec succès.
BB-Code
Pour insérer une URL clickable
Pour insérer une adresse E-mail
Pour annoter
Pour écrire du code
Pour faire un lien vers une fonction PHP
Pour écrire du texte préformaté
Pour écrire du texte en gras
Pour écrire du texte en italique
Pour écrire du texte souligné
Pour écrire du texte barré
Pour écrire un titre principal
Pour écrire un titre secondaire
Pour écrire une liste
Smiley
:bond:
:boxe:
:bsmile:
:bump:
:clap:
:coeur:
:cool:
:cry:
:eek:
:evil:
:fleur:
:fou2:
:fou:
:grin:
:grrr:
:hammer:
:hippy:
:hum:
:idee2:
:idee:
:kdo:
:king:
:ko:
:lol:
:love2:
:love:
:mad:
:maitre:
:noel:
:oops:
:raa:
:razz:
:roll:
:sad:
:skull:
:smile:
:timide:
:trink:
:vice:
:vomi:
:wink:
:zzz: