2010-08-07 9 views
1

Je reçois "Erreur irrécupérable: Appel à la fonction non définie getSContent()" avec le code inclus mais ... comme vous pouvez le voir: Ma fonction est là!Pourquoi j'obtiens une erreur de "fonction manquante"? Ma fonction est juste là!

S'il vous plaît, aidez. Je suis sûr que j'ai besoin de dormir.

class InfoController extends AppController { 

    var $name = 'Info'; 
    var $helpers = array('Html', 'Session'); 
    var $uses = array(); 

    function display() { 
     $path = func_get_args(); 

     $section = $path[0]; 
     $mainMenuActiveElement = $section; 
     $sectionContent = getSContent($section); 

     $this->set(compact('section', 'mainMenuActiveElement', 'sectionContent')); 
     $this->render('/pages/info'); 
    } 

    function getSContent($section) { 
     $sectionContent = ''; 
     switch ($section) { 
      case 'bases': 
       $sectionContent = 'some content'; 
       break; 
      case 'informacion': 
       $sectionContent = 'some other content'; 
       break; 
     } 
     return $sectionContent; 
    } 

} 

Répondre

7

Vous devez spécifier le contexte. PHP contrairement à e.g. C++ ne suppose pas this implicitement.

$sectionContent = $this->getSContent($section); 
+0

Oh! J'ai vraiment besoin d'aller dormir. Merci @VolkerK! – vmarquez

+0

Et je suis vraiment désolé pour la partie "ne suppose pas ... implicitement" ;-) Voir http://en.wikipedia.org/wiki/Name_resolution – VolkerK

+0

Cela n'aurait pas de sens en PHP. Voir http://stackoverflow.com/questions/3345408/what-is-the-point-of-having-this-and-self-in-php/3376490#3376490 – Artefacto

2

Votre fonction est notamment une méthode. Les noms de méthodes ne résident pas dans la table des fonctions de PHP, ils sont associés à une classe particulière.

Vous devriez les appeler avec la notation $object->methodName(), où $object peut être $this lorsque l'intérieur d'une méthode pour appeler une méthode d'instance de la même instance que l'actuel.

La notation devient ClassName::methodName() lorsque la méthode est déclarée statique. Dans des circonstances spéciales, les méthodes d'instance appellent aussi être appelées avec cette syntaxe.