[Résolu] Incompréhensible...

Incompréhensible... [Résolu] - PHP - Programmation

Marsh Posté le 31-03-2008 à 13:37:09    

Salut à tous !
 
Voilà, mon problème : j'utilise un première classe nommée "Capitaine" qui, lorsque j'utilise la méthode "creerCapitaine" de celle-ci, instancie la classe "Personne". Ensuite, avec ma classe "Capitaine", je veux récupérer le nom et l'âge du Capitaine via les méthodes de la classe "Personne". A priori ça ne devrait pas poser de pblms, surtout que je l'ai déjà fais et que ça fonctionnait... mais là, je ne sais pas pourquoi, ça ne veut plus marcher !! :(
 
Le message d'erreur que j'obtiens : Fatal error: Call to a member function getNom() on a non-object
 
Voici donc le code, ça sera certainement plus parlant :
 
La classe Personne (personne.class.php) :
 

Code :
  1. <?php
  2. class Personne
  3. {
  4. private $nom = "Nom par defaut";
  5. private $age = 99;
  6. /**
  7.  * Constructeur
  8.  *
  9.  * @param string $nom
  10.  * @param integer $age
  11.  */
  12. public function __construct($nom, $age)
  13. {
  14.  $this->nom = $nom;
  15.  $this->age = (int)$age;
  16. }
  17. /**
  18.  * Retourne le nom
  19.  *
  20.  * @return string
  21.  */
  22. public function getNom()
  23. {
  24.  return $this->nom;
  25. }
  26. /**
  27.  * Retourne l'age
  28.  *
  29.  * @return integer
  30.  */
  31. public function getAge()
  32. {
  33.  return $this->age;
  34. }
  35. /**
  36.  * Destructeur
  37.  *
  38.  */
  39. public function __destruct()
  40. {
  41.  $this->nom = null;
  42.  $this->age = null;
  43. }
  44. }
  45. ?>


 
et voici maintenant le code de la classe Capitaine :  
 

Code :
  1. <?php
  2. require_once("personne.class.php" );
  3. class Capitaine
  4. {
  5. private $leCapitaine = null;
  6. /**
  7.  * Crée un nouveau capitaine
  8.  *
  9.  * @param string $nom
  10.  * @param integer $age
  11.  */
  12. public function creerCapitaine($nom, $age)
  13. {
  14.  $this->leCapitaine = new Personne($nom, $age);
  15. }
  16. /**
  17.  * Retourne le nom du Capitaine
  18.  *
  19.  * @return string
  20.  */
  21. public function NomDuCapitaine()
  22. {
  23.  return $this->leCapitaine->getNom();
  24. }
  25. /**
  26.  * Retourne l'âge du Capitaine
  27.  *
  28.  * @return integer
  29.  */
  30. public function AgeDuCapitaine()
  31. {
  32.  return $this->leCapitaine->getAge();
  33. }
  34. }
  35. $c = new Capitaine("TOTO", 12);
  36. //Le code qui pose problème !..
  37. echo "Nom: ".$c->NomDuCapitaine()."<br/>";
  38. echo "Age: ".$c->AgeDuCapitaine()."<br/>";
  39. exit();
  40. ?>


 
Si vous avez une idée ou même une petite piste, je suis preneur !!
Merci d'avance,
Lionel.


Message édité par pot2yaourt le 31-03-2008 à 13:58:07
Reply

Marsh Posté le 31-03-2008 à 13:37:09   

Reply

Marsh Posté le 31-03-2008 à 13:50:53    

Ben tu as instancier Capitaine, mais la méthode creerCapitaine tu ne l'as pas appelé donc leCapitaine est encore null.
 
ou alors rajoute
 

Code :
  1. public function __construct($nom, $age) {
  2.     $this->creerCapitaine($nom, $age);
  3. }


Message édité par yellu le 31-03-2008 à 13:52:31
Reply

Marsh Posté le 31-03-2008 à 13:51:14    

public function creerCapitaine devrait être __construct (enfin si j'ai bien compris ce que tu cherches à faire ... )


---------------
Software and cathedrals are much the same - first we build them, then we pray.
Reply

Marsh Posté le 31-03-2008 à 13:53:01    

C'est l'un des solution (j'ai éditer mon post)

Reply

Marsh Posté le 31-03-2008 à 13:57:18    

Ah mais quelle truffe je suis !!! Grrr !!! :(
 
A force de faire des copier/coller par-ci par-là, j'ai oublié le principal !!  
Décidément, aujourd'hui j'ai vraiment pas les yeux en face de trous ! Vivement ce soir que je me couche !
 
Merci pour tout !!!
Lionel.

Reply

Marsh Posté le 31-03-2008 à 23:52:33    

le mieux (logique ?) serait que Capitaine hérite de Personne vu que le capitaine est une personne avant tout ;)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed