call to undefined function

Petit nouveau ! | 4 Messages

14 juil. 2008, 20:15

Bonjour,
je debute en poo avec php5 et je fais face a une erreur que je ne comprends pas.
J'espere que vous saurez me mettre sur la voie.
quand j'appelle la fonction getWidget() j'obtiens un message d'erreur undefined function.
Pourtant ma fonction existe bien.
Est ce parcequ'elle retourne un resultat NULL?
$this->glade est bien un objet et je doit avoir un retour non NULL.
Je seche completement et la moindre piste sera la bienvenue.

C'est surement tout bete et je serais rouge de honte quand vous m'aurez indique mon erreur :lol:

Merci d'avance

voici mon code
 class Module{ 

 
    /*~*~*~*~*~*~*~*~*~*~*/
    /*  1. properties   */
    /*~*~*~*~*~*~*~*~*~*~*/
    
	private $strName; #@desc name of the module to be loaded
	private $objGladeObject; #name of the glade object

    /*~*~*~*~*~*~*~*~*~*~*/
    /*  2. méthodes      */
    /*~*~*~*~*~*~*~*~*~*~*/
    
	
    /**
    * Constructor
    * 
    * <p>create class instance</p>
    * 
    * @name Module::__construct()
    * @param $strName
    * @param nom du second paramètre
    * @param etc ...
    * @return glade file $moduleName
    */
    public function __construct($strName) {

	$this->name=$strName;
	$this->glade = new GladeXML(GLADE.$this->name.'.glade');
	$this->glade->signal_autoconnect();
	
    } 
    
    /*~*~*~*~*~*~*~*~*~*~*~*~*~*/
    /*  2.1 méthodes privées   */
    /*~*~*~*~*~*~*~*~*~*~*~*~*~*/
    
	private function getWidget($widget){	
	$GetWidget = $this->glade->get_widget("'".$widget."'");	
	return $GetWidget;
	}	
	
    /*~*~*~*~*~*~*~*~*~*~*~*~*~*/
	
    /*  2.1 méthodes publiques              */
	/*                                               */
    /*~*~*~*~*~*~*~*~*~*~*~*~*~*/
    	
	
	
	public function select_Window($widget){
	$Widget = getWidget($widget);
	return $Widget; 
	}
	
	// set the label of a widget
	public function Label($widget,$Wordings){
	$wgtLabel=getWidget($widget);
	$wgtLabel->set_label($Wordings);
	}
	
	
	
	

    /**
    * Destructeur
    * 
    * <p>Destruction de l'instance de classe</p>
    * 
    * @name Nom de la classe::__destruct()
    * @param nom du premier paramètre
    * @param nom du second paramètre
    * @param etc ...
    * @return void
    */
    public function __destruct() {
    
    }
 }
[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]

ViPHP
ViPHP | 5924 Messages

14 juil. 2008, 20:20

Si tu appelles getWidget() directement il essayera d'appeler la fonction, qui n'existe pas. Pour appeler la méthode, tu doit préfixer par $this-> …

Petit nouveau ! | 4 Messages

14 juil. 2008, 20:34

Merci de cette reponse rapide.
C'etait effectivement tout bete :)

Je n'ai plus cette erreur mais une autre apparait au niveau de la ligne :
$wgtLabel->set_label($Wordings); 
Il me semblait $wgtLabel devait avoir la valeur de l'objet retourne par :
$wgtLabel=$this->getWidget($widget); 
et que donc cette ligne devait fontionner.

Cependant l'erreur qui m'est retournee Call to a member function set_label() on a non-object
indique clairement que ce n'est pas le cas.

Apres verification
$wgtLabel=$this->getWidget($widget); 
me donne un retour de type NULL au lieu de l'objet que j'attend

Encore une erreur idiote de ma part?
Modifié en dernier par Riseryn le 14 juil. 2008, 20:56, modifié 2 fois.

ViPHP
ViPHP | 5924 Messages

14 juil. 2008, 20:53

Bah la même… :-/

Petit nouveau ! | 4 Messages

14 juil. 2008, 20:54

Oups pardon j'ai oublie de modifier mon exemple j'ai bien ajoutte $this->

j'ai edite mon post precedent pour corriger

le code d'appel est :
// set the label of a widget
	public function Label($widget,$Wordings){
	wgtLabel=$this->getWidget($widget);
	wgtLabel->set_label($Wordings);
	}

ViPHP
ViPHP | 5924 Messages

14 juil. 2008, 22:03

Là je ne peux pas t'aider plus. Le problème est que tu dois rechercher une donnée qui n'existe pas ou un truc de ce genre. Donc vérifie bien que chaque variable en jeu contient ce qu'elle doit contenir, que ton XML contient ce qu'il doit contenir, etc… Abuse du var_dump()…

Petit nouveau ! | 4 Messages

14 juil. 2008, 22:33

En tout cas merci de tes reponses rapides.

j'ai finalement trouve la solution a ce dernier probleme

au lieu de
$this->GetWidget = $this->glade->get_widget('$widget');
il fallait ecrire
$this->GetWidget = $this->glade->get_widget($widget);
juste une question de '

Ce sont ces petits details qui font perdre du temps :)