Instancier une classe dans une classe

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Instancier une classe dans une classe

par titerm » 11 sept. 2007, 18:55

Dans ce cas, le fichier de conf est unique. Il n'y a rien a vérifier lors d'une mise en prod si ce n'est le contenu du fichier de conf.

par Invité » 11 sept. 2007, 16:23

Ce qui n'est pas très propre, c'est de codé dans une classe les paramètres de connexion...
Les fichiers de config sont fait pour cela
Mais justement, ils sont codés dans un fichier de conf...

par fab » 11 sept. 2007, 16:22

Pas faux :) enfin le principe est exactement le même

par pascaltje » 11 sept. 2007, 16:17

@fab :
c'est pas vraiment ça la composition, mais plutôt :

class b {
// le detail de b
}

class a{

public $b;

public function __construct()
{
$this->b = new b();
}

}
A+

Pascal

par titerm » 11 sept. 2007, 14:51

Ce qui n'est pas très propre, c'est de codé dans une classe les paramètres de connexion...
Les fichiers de config sont fait pour cela

par Ikari » 11 sept. 2007, 14:37

Merci pour vos réponses...

Effectivement, la solution que j'ai trouvé c'est de réinstancier la classe DB dans ma classe membre, mais bon, quand je vais passer en prod, je vais être obligé de voir sur tous mes fichiers class si je n'ai pas fait une déclaration avec les paramètres de développement ? Je trouve pas ça très propre !

Alors que pour le moment j'instanciait une fois en début de script et la connexion était valable partout (donc une seule ligne à modifier...)

par fab » 11 sept. 2007, 14:21

Un peu plus d'explication sur les dires de pascaltje

il faut en fait retourner un objet depuis une method d'un autre objet exemple :
class a
{
   public function appel_b ()
   {
       $b = new b();
       return $b;
    }
}

class b 
{
   public function hello_world()
   {
       return 'Hello world';
   }
}
?>
Ainsi
 $test = new a(); 
echo $test->appel_b()->hello_world();
retourne : Hello world

( Note : le framework symfony utilise BEAUCOUP cette facette de l'objet dans PHP )

par Yosh » 11 sept. 2007, 14:21

on peut même composer les objets :
un membre de la classe A est un objet de la classe B

A+

Pascal
Tu pourrais donner un exemple Pascaltje s'il te plait?

par Gaap » 11 sept. 2007, 14:19

Je signale également au passage qu'on doit écrire "extends"
:wink: j'avais corrigé ma faute de frappe dés le postage cyrano :wink:

par pascaltje » 11 sept. 2007, 14:14

on peut même composer les objets :
un membre de la classe A est un objet de la classe B

A+

Pascal

par Cyrano » 11 sept. 2007, 14:10

Très sommairement :

On est pas obligé d'étendre une classe pour l'utiliser dans une autre.

Je signale également au passage qu'on doit écrire "extends"

Donc on peut faire quelque chose du genre : supposons que tu aies une première classe dans un fichier nomm ma_class_a.php avec
<?php
class maclasseA 
{
    public function __construct(){}
    
    public function maMethodeA()
    {
        $a = 1;
        return $a;
    }
}
Tu peux ensuite avoir une autre classe faisant dans un autre fichier ma_classe_b.php comme ceci :
<?php
require_once('./ma_classe_a.php');
class maclasseB 
{
    public function __construct(){}
    
    public function maMethodeB()
    {
        $b = new maclasseA();
        return $b->maMethodeA();
    }
}
Ou bien étendre la classe en faisant :
<?php
require_once('./ma_classe_a.php');
class maclasseB extends maclasseA 
{
    public function __construct(){}
    
    public function maMethodeB()
    {
        return $this->maMethodeA();
    }
}

par Gaap » 11 sept. 2007, 14:00

si j'ai bien pigé

il te faut faire un héritage de class
class connect{

.......

}
class XXX extends connect{


}
du coup toutes tes fonctions de connect seront accéssible de XXX

par Cyrano » 11 sept. 2007, 13:59

Où est initialisé ton objet $db ?

Instancier une classe dans une classe

par Ikari » 11 sept. 2007, 13:44

Bonjour à tous !

Je me mets à la "POO" dans PHP, et je galère un peu :)

Ce que je cherche à faire est assez simple : j'ai pour le moment deux classes : la classe gestSql (qui gère mes connexions et le parsing de mes données) ainsi que la classe Membre (qui gère... les membres).

Je cherche à créer une méthode de connexion à ma classe Membre, qui doit aller piocher des infos dans la BDD, j'ai donc écrit ceci :
function connect ($cLogin, $cPass)
{
	if ($cLogin == '' || $cPass == '')	
	{
		return 'too_short';
	}
	else
	{
		$user = $db->get_row("SELECT login, pass FROM membres WHERE login = \"".$cLogin."\"");
		return $user;
	}
}
Or l'erreur la moins grave que je réussis à avoir est la suivante :

Code : Tout sélectionner

Fatal error: Call to a member function get_row() on a non-object in H:\Serveur\monsite.fr\php-classes\Membre.php on line 45
J'ai tenté beaucoup de choses, déclarer ma classe de connexion ailleurs, avant, après la classe Membre, rien n'y fait.

Donc ma question est la suivante : comment fait-on pour déclarer une classe dans une autre classe ?

Je vous remercie par avance !