2010-05-23 3 views
1

Que dois-je faire pour appeler $ this-> two() depuis ma fonction innerOne? Est-ce possible avec PHP OOP?Comment accéder à la fonction dans PHP OOP

est ici l'erreur je suis RECEVOIR:

Fatal error: Using $this when not in object context 

Voilà comment mon code ressemble:

class myClass { 

    function one(){ 

     function innerOne() { 
      // Some code 
      $this->two($var1, $var2); 
     } 

     // Some code 

     innerOne(); 

    } 

    function two($var1, $var2) { 
    // Does magic with passed variables 
     return $var1 . $var2; 
    } 


} 

Répondre

2

Essayez ceci:

function innerOne($t) { 
    //some code... 
    $t->two($var1, $var2); 
} 

innerOne($this); 
+0

Merci homme! J'ai utilisé votre exemple et pensé un peu en dehors de la boîte et a été capable de le résoudre! Posté ma solution dans mon post original si quelqu'un se demande. Merci beaucoup! – Industrial

+1

@Industrial: Assurez-vous d'accepter cette réponse aussi. – BoltClock

+1

Absolument, je ne pouvais pas l'accepter au moment où j'ai écrit le commentaire. "Vous devrez attendre 2 minutes avant d'accepter cette réponse" est un message génial à voir - pas tous les jours vous obtenez une réponse si rapidement. Bigups à Jacob! – Industrial

1

Cette fonction est uniquement définie dans ce champ d'application. Vous ne pouvez donc pas y accéder en dehors de cette portée. Il y a des trucs autour mais je ne recommanderai pas.

+1

Pas vrai. innerOne est une fonction globale une fois qu'elle est définie. – Artefacto

2

innerOne est actuellement une fonction globale.

Le fait que vous l'ayez défini à l'intérieur d'une méthode n'a pas d'importance, c'est dans la table de fonctions globale. Voir:

class myClass { 

    static function one(){ 

     function innerOne() { 
      // Some code 
      echo "buga!"; 
     } 


    } 
} 

myClass::one(); 

innerOne(); 

donne "buga!". Vous devez d'abord appeler un() pour que la fonction soit définie.

Ce que vous voulez est ceci:

class myClass { 

    function one($var1, $var2){ 
     return $this->innerOne($var1, $var2); 
    } 

    private function innerOne($var1, $var2) { 
     return $this->two($var1, $var2); 
    } 

    function two($var1, $var2) { 
    // Does magic with passed variables 
     return $var1 . $var2; 
    } 


} 

$var = new myClass(); 
echo $var->one("bu","ga");