prob acces a une methode d'une classe

prob acces a une methode d'une classe - PHP - Programmation

Marsh Posté le 25-07-2005 à 13:19:35    

j'ai les classes suivantes :  
 
classe mère 'config' avec la methode getTitre().
 
classe fille 'controleur'
classe fille 'identite'
 
probleme: 'controleur' accede bien a getTitre(), mais pas 'identite'
 
vous faut il le code ?

Reply

Marsh Posté le 25-07-2005 à 13:19:35   

Reply

Marsh Posté le 25-07-2005 à 13:23:09    

PHP ne gère pas les héritages multiples.
Enfin je sais pas si j'ai bien compris ton truc, balance le code pour voir.

Reply

Marsh Posté le 25-07-2005 à 13:25:56    

Ca a pas l'air d'être de l'héritage multiple, mais fait voir ton code oui, paskeu là...


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 25-07-2005 à 13:27:13    

laisse tomber ma description, voici des extraits :
 

Code :
  1. class config {}
  2. class controleur_Generique extends config {}
  3. class controleur_Identification extends controleur_Generique {}
  4. class Template extends controleur_Generique {}


 
plusieurs classes filles ne peuvent pas heriter d'une classe superieure, elle meme heritant d'une classe mere ?
 
dans mes tests,  
'controleur_Identification' a acces a la methode getTitre()
'Template' n'y a pas acces.


Message édité par jokari34 le 25-07-2005 à 13:29:01
Reply

Marsh Posté le 25-07-2005 à 13:28:39    

Ben si y'a pas de raison.


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 25-07-2005 à 13:31:51    

Code :
  1. class config {
  2. public function getTitre() { return 'blabla'; }
  3. }
  4. class controleur_Generique extends config {}
  5. class controleur_Identification extends controleur_Generique {}
  6. class Template extends controleur_Generique {}
  7. $a = new Template();
  8. echo $a->getTitre();


 
Affiche "blabla".


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 25-07-2005 à 13:39:21    

ben apparement si  
faut il ajouter public devant la fonction ?

Reply

Marsh Posté le 25-07-2005 à 13:40:19    

Faut qu'elle soit protected au minimum.


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 25-07-2005 à 13:41:59    

Enfin dans mon exemple faut qu'elle soit public, mais si tu veux l'utiliser dans Template faut qu'elle soit au moins protected.


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 25-07-2005 à 13:45:14    

il est possible aussi que mon code soit pas terrible
je peux vous montrer tout le code si vous voulez

Reply

Marsh Posté le 25-07-2005 à 13:45:14   

Reply

Marsh Posté le 25-07-2005 à 13:46:21    

Reply

Marsh Posté le 25-07-2005 à 13:53:45    

en fait je bosse la POO (je suis pas ce qu'on peut dire 'calé' la dedans. Jusqu'à present j'etais 'full procedural'
 
voici les codes. chaque classe est dans un fichier.
 
 
 
classe config

Code :
  1. <?php
  2. class config {
  3. /*******************************************************************  
  4. /*  cette classe gère les variables d'environnement  
  5. ********************************************************************/
  6. var  $__SITE_URL ;       // URL HTTP de la racine du site
  7. var $__SITE_PATH ;      // URL système de la racine du site
  8. var $__SITE_TITRE;      // Titre du site (<title> )
  9.     // Constructeur de la classe    ------------------------------------------------
  10.     function __construct () {
  11.        
  12.         $this->setSiteUrl();
  13.         $this->setSitePath();
  14.         $this->setSiteTitre();
  15.     }
  16.     // Getter et Setter du SITE URL    ---------------------------------------------
  17.     function setSiteUrl() {
  18.        
  19.         $this->__SITE_URL   = "http://localhost/VideoFutur";
  20.     }
  21.     public function getSiteUrl() {
  22.      
  23.         return $this->__SITE_URL;
  24.     }
  25.     // Getter et Setter du SITE PATH    ---------------------------------------------
  26.     function setSitePath() {
  27.        
  28.         $this->__SITE_PATH = "i:/Projets_Internet/Projets/PHPsites/VideoFutur"  ;     
  29.     }
  30.     function getSitePath() {
  31.        
  32.         return $this->__SITE_PATH;
  33.     }
  34.     // Getter et Setter du SITE TITRE    --------------------------------------------
  35.    
  36.     function setSiteTitre() {
  37.        
  38.         $this->__SITE_TITRE = "Video Futur - Intranet"; 
  39.     }
  40.     function getSiteTitre() {
  41.        
  42.         return $this->__SITE_TITRE; 
  43.     }
  44. }
  45. ?>


 
classe controleur_Generique

Code :
  1. <?php
  2. require_once("i:/Projets_Internet/Projets/PHPsites/VideoFutur/Config/config.php" );
  3. class controleur_Generique extends config{
  4.     private $evenement_url;     // $evenement utilisateur
  5.     private $parametre;         // liste des paramètres du site
  6.        
  7.     public function __construct() {
  8.    
  9.     parent::__construct();
  10.    
  11.     }
  12.    
  13.      function url() {
  14.         echo "URL : ".$this->getSiteUrl();
  15.     }
  16.    
  17.     function setParametre($nom_param, $valeur_param) {
  18.        
  19.         $this->parametre[$nom_param]= $valeur_param   ;
  20.     }
  21.    
  22.     function getParametre($nom_param) {
  23.        
  24.         return $this->parametre[$nom_param]; 
  25.     }   
  26.     // verifie si la session utilisateur existe ---------------------------------------
  27.    
  28.     function getReponseSession() {
  29.            
  30.         if ( isset($_SESSION['ID_user']) && isset($_SESSION['ID_magasin']) ) {
  31.    
  32.             return true;           
  33.         }
  34.        
  35.         else {
  36.        
  37.             return false;         
  38.         }
  39.        
  40.    
  41.     }
  42.    
  43.     // mémorisation  de l'évênement de formulaire -------------------------------------
  44.     function setEvenementURL() {
  45.    
  46.         $this->evenement_url = $_REQUEST['user_event'];
  47.     }
  48.     // renvoit l'évênement de formulaire -----------------------------------------------
  49.     function getEvenementURL() {
  50.    
  51.         return $this->evenement_url;
  52.     }
  53.    
  54.     // crée la liste générique des pages du template  ----------------------------------
  55.    
  56.     function setListePages () {
  57.    
  58.         $this->setParametre("page_zone_logo","inc_logo.php" );   
  59.         $this->setParametre("page_zone_header","inc_header.php" );
  60.         $this->setParametre("page_zone_menu","inc_menu.php" );
  61.     }
  62.    
  63.  
  64. }
  65. ?>


 
classe controleur_Identification  

Code :
  1. <?php
  2.     require_once("controleur_Generique.php" );
  3.     require_once("../Classes/cls_Template.php" );
  4. class controleur_Identification extends controleur_Generique {
  5.     private $my_template ;
  6.    
  7.    
  8.     public function construct() {
  9.     }   
  10.    
  11.    
  12.     function CreerTemplate() {
  13.    
  14.         $this->my_template = new Template($this->getparametre("page_zone_logo" ), $this->getParametre("page_zone_header" ), $this->getParametre("page_zone_menu" ));
  15.         $this->my_template->URL();
  16.     }
  17.     function AfficherTemplate() {
  18.        
  19.        
  20.         $this->my_template->afficher(); 
  21.     }
  22. }
  23. $ctrl = new Template();
  24. echo $ctrl->getSiteUrl();
  25. //$ctrl->CreerTemplate();
  26. //$ctrl->AfficherTemplate();
  27.    
  28. ?>


 
classe Template

Code :
  1. <?php
  2. class Template extends controleur_Generique {
  3.    
  4.    
  5.     private $zone_logo;
  6.     private $zone_header;
  7.     private $zone_menu;
  8.        
  9.    
  10.     public function __construct($une_zone_logo="", $une_zone_header="", $une_zone_menu="" ) {
  11.      
  12.        
  13.         $this->setZoneLogo($une_zone_logo);
  14.         $this->setZoneheader($une_zone_header);
  15.         $this->setZoneMenu($une_zone_menu);
  16.      
  17.     } 
  18.    
  19.    
  20.    
  21.     function setZoneLogo($une_zone_logo) {
  22.    
  23.         $this->zone_logo = une_zone_logo;           
  24.     }
  25.    
  26.     function getZoneLogo() {
  27.        
  28.         return $this->zone_logo;
  29.     }
  30.    
  31.    
  32.     function setZoneheader($une_zone_header) {
  33.    
  34.         $this->zone_header = $une_zone_header;       
  35.     }
  36.    
  37.     function getZoneHeader() {
  38.    
  39.         return $this->zone_header;
  40.     }
  41.    
  42.     function setZoneMenu($une_zone_menu) {
  43.    
  44.         $this->zone_menu = $une_zone_menu;
  45.     }
  46.     function getZoneMenu() {
  47.        
  48.         return $this->zone_menu;
  49.     }
  50.     function setZoneVue($une_zone_vue) {
  51.    
  52.         $this->zone_vue = $une_zone_vue;
  53.     }
  54.     function getZoneVue() {
  55.        
  56.         return $this->zone_vue;
  57.     }
  58.     function afficher() {
  59.    
  60.         include($this->getSiteUrl()."/Templates/Template_site.php" );
  61.     }
  62.     function url() {
  63.         echo "URL : ".$this->getSiteUrl();
  64.     }
  65. }
  66. ?>

Reply

Marsh Posté le 25-07-2005 à 13:57:56    

Bon et c'est où que ça plantouille ?


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 25-07-2005 à 14:20:58    

le code tu le trouve bon ?
 
le coe pante ici :
 
$ctrl = new Template();  
echo $ctrl->getSiteUrl();  
 
en fait getSiteUrl() me retourne rien.

Reply

Marsh Posté le 25-07-2005 à 15:20:24    

tiens ce nom me rappel des énoncés http://localhost/VideoFutur ^^
tu srais pas l'upmc ?

Reply

Marsh Posté le 25-07-2005 à 19:44:25    

ah non
c juste un nom que j'ai trouvé comme pour créer un projet perso

Reply

Marsh Posté le 25-07-2005 à 20:45:02    

jokari34 a écrit :

le code tu le trouve bon ?
 
le coe pante ici :
 
$ctrl = new Template();  
echo $ctrl->getSiteUrl();  
 
en fait getSiteUrl() me retourne rien.


 
Ah ben forcément, $__SITE_URL n'a aucune valeur si tu fais pas un setSiteUrl() avant. Au passage ça a l'air bien bizarre comme set*... [:figti]


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 25-07-2005 à 20:54:46    

je crois que je vais un peu trop vite dans l'apprentissage
je vais faire un truc moins compliqué
au fait quelqu'un connait le modele MVC (design pattern) ?

Reply

Sujets relatifs:

Leave a Replay

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