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] mélange de classe


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Profil pro
    Webmaster
    Inscrit en
    Mai 2007
    Messages
    52
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mai 2007
    Messages : 52
    Points : 52
    Points
    52
    Par défaut [POO] mélange de classe
    Bonjour,

    Je débute en POO avec PHP5 et je fais face à un problème qui me bloque totalement pour avancer.

    Je n'arrive pas à accéder à une classe à partir d'une autre.

    En fait voici mes classes :

    Une classe oracle pour la connexion à la bdd et les requêtes..

    Une classe CV avec la création des objets pour oracle et expérience.

    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
     
    class cv
    {
    	public  $db;
    	private $coordonnee;
    	public  $experience;
    	private $formation;
    	private $loisir;
     
    	function __construct()
    	{
    		$this->db			= new oracle;
    		$this->coordonnee 	= new coordonnee;
    		$this->experience 	= new experience;
    		$this->formation 	= new formation;
    		$this->loisir 		= new loisir;
    		$this->langue		= new langue;
    	}
     
    	function __destruct()
    	{
    		//...
    	}
    }
    une classe expérience

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    class experience
    {
    	public function del($id_exp)
    	{
    		$req = "DELETE FROM EXP_PRO WHERE ID_EXP = ".$id_exp;
     
    		return $this->exe($req);
    	}
    }
    Dans cette classe, j'essaye d'accèder à la méthode exe() de la classe oracle définit dans le constructeur de la classe CV.

    Et dans ma page j'appele les classes comme cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $cv  = new cv();
     
    $sql 		= $cv->db;
    $sql->connect();
     
    $experience = $cv->experience;
    $experience->del($id_exp);

    Seulement j'obtiens comme erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Fatal error: Call to undefined method experience::exe()
    j'ai essayé, dans ma page, d'écrire ceci :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $cv->experience->del($id_exp)
    Mais je ne pense pas que cela soit correct au niveau de la syntaxe.

    Et j'obtiens la même erreur.


    Si vous pouviez m'éclairer sur ces points là

  2. #2
    Rédacteur
    Avatar de RideKick
    Homme Profil pro
    Directeur technique
    Inscrit en
    Septembre 2006
    Messages
    5 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Septembre 2006
    Messages : 5 914
    Points : 12 572
    Points
    12 572
    Par défaut
    tu dois creer une methode experience dans ta classe cv qui instancie la classe experience et qui supprime ton objet par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    function experience($id_exp)
    	{
             $experience = new experience();
             $experience->del($id_exp);
    		//...
    	}
    Edit : et du coup tu supprime via :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $cv->experience($id_exp)

  3. #3
    Membre du Club
    Profil pro
    Webmaster
    Inscrit en
    Mai 2007
    Messages
    52
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mai 2007
    Messages : 52
    Points : 52
    Points
    52
    Par défaut
    Merci pour ta réponse j'ai modifié mes scripts.

    J'ai plusieurs questions :

    est-ce que ca serait pas plus simple d'instancier la classe expérience dans le constructeur de la classe cv et d'appeler la méthode del de la classe expérience comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $cv->experience->del($id_exp);

    Ensuite, si je m'inspire de ta solution, je n'ai plus besoin de la propriété public $experience, ni d'instancier la classe expérience dans le constructeur de la classe CV, si?


    Dernier point, je n'arrive pas à appeler la méthode exe() de la classe oracle dans ma fonction del de la classe expérience.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    return $this->db->exe($req);
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    return $cv->db->exe($req);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Call to a member function exe() on a non-object
    alors que $cv->db est bien un objet

  4. #4
    Rédacteur
    Avatar de RideKick
    Homme Profil pro
    Directeur technique
    Inscrit en
    Septembre 2006
    Messages
    5 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Septembre 2006
    Messages : 5 914
    Points : 12 572
    Points
    12 572
    Par défaut
    Citation Envoyé par Ema*h Voir le message
    Merci pour ta réponse j'ai modifié mes scripts.

    J'ai plusieurs questions :

    est-ce que ca serait pas plus simple d'instancier la classe expérience dans le constructeur de la classe cv et d'appeler la méthode del de la classe expérience comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $cv->experience->del($id_exp);
    C'est une solution oui !

    Citation Envoyé par Ema*h Voir le message
    Ensuite, si je m'inspire de ta solution, je n'ai plus besoin de la propriété public $experience, ni d'instancier la classe expérience dans le constructeur de la classe CV, si?
    Dans ma solution non , tu n'en a pas besoin.

    Citation Envoyé par Ema*h Voir le message
    Dernier point, je n'arrive pas à appeler la méthode exe() de la classe oracle dans ma fonction del de la classe expérience.
    Dans ton exemple il faut plutôt instancier la classe oracle dans la classe expérience , ou opter pour ma solution

  5. #5
    Membre du Club
    Profil pro
    Webmaster
    Inscrit en
    Mai 2007
    Messages
    52
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mai 2007
    Messages : 52
    Points : 52
    Points
    52
    Par défaut
    Merci pour les réponses !

    En fait maintenant je fais ç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
     
    class cv
    {
    	public  $db;
    	private $coordonnee;
    	public  $experience;
    	private $formation;
    	private $loisir;
    	private $test;
     
    	function __construct()
    	{
    		$this->db			= new oracle;
    		//$this->coordonnee 	= new coordonnee;
    		$this->experience 	= new experience;
    		//$this->formation 	= new formation;
    		//$this->loisir 		= new loisir;
    		//$this->langue		= new langue;
    	}
    }
    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
     
    class experience
    {
    	var $req;
    	function __construct()
    	{
    		$this->db			= new oracle;
    		$this->db->connect();
    	}
     
    	function __destruct()
    	{
    		//...
    	}
     
    	public function del($id_exp)
    	{
    		$this->req = "DELETE FROM EXP_PRO WHERE ID_EXP = ".$id_exp;
    		return $this->db->exe($this->req);
    	}
    }
    et l'appel :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $cv  = new cv();
     
    $sql = $cv->db;
    $sql->connect();
     
     
    $cv->experience->del($id_exp);
    mais je trouve ça étrange de devoir faire 2x $sql->connect(); (dans ma page et dans la classe experience)

    Pareil pour l'instanciation de l'objet oracle dans la classe CV qui est censé être public, je ne peux pas l'atteindre dans la classe experience.
    Obligé de l'instancier dans experience aussi..


    Mais au final ça fonctionne

    edit : ta solution fonctionne aussi et ça m'a permis de voir plusieurs solutions pour ce problème

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

Discussions similaires

  1. [POO] Constructeur de classe
    Par cescu dans le forum Langage
    Réponses: 7
    Dernier message: 14/02/2006, 22h50
  2. [POO] Déclaration de classe selon une variable
    Par Michaël dans le forum Langage
    Réponses: 1
    Dernier message: 07/01/2006, 19h33
  3. [POO] [PHP 5 CLASSES]Source à part?
    Par Jean_Benoit dans le forum Langage
    Réponses: 3
    Dernier message: 20/10/2005, 12h50
  4. [POO] Ecrire une classe descendante
    Par GLDavid dans le forum Langage
    Réponses: 4
    Dernier message: 14/10/2005, 20h04
  5. Réponses: 2
    Dernier message: 09/10/2005, 16h35

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