111 votes

Appeler une fonction dans une méthode de classe ?

J'ai essayé de trouver comment procéder, mais je ne sais pas vraiment comment.

Voici un exemple de ce que j'essaie de faire :

class test {
     public newTest(){
          function bigTest(){
               //Big Test Here
          }
          function smallTest(){
               //Small Test Here
          }
     }
     public scoreTest(){
          //Scoring code here;
     }
}

Voici la partie qui me pose problème : comment appeler bigTest() ?

2 votes

Juste pour être sûr : une fonction et une méthode, c'est exactement la même chose fonction === méthode. Le terme méthode est plus souvent utilisé dans le langage OO pour décrire la fonction d'une classe.

0 votes

Si certains termes manquent, c'est parce que j'étais en train de quitter le bureau et que j'avais peu de temps.

206voto

Sergey Kuznetsov Points 4324

Essaie celle-là :

class test {
     public function newTest(){
          $this->bigTest();
          $this->smallTest();
     }

     private function bigTest(){
          //Big Test Here
     }

     private function smallTest(){
          //Small Test Here
     }

     public function scoreTest(){
          //Scoring code here;
     }
}

$testObject = new test();

$testObject->newTest();

$testObject->scoreTest();

1 votes

Est-il possible d'exécuter un function() à partir d'une autre page .php à l'intérieur d'une fonction de classe, puis récupérer les résultats à l'intérieur de la fonction de classe ? Par exemple, j'ai une requête qui sélectionne tous les éléments d'une table, puis renvoie un ensemble de résultats de récupération. Est-il possible de boucler sur cet ensemble de résultats dans une fonction de classe ? class query{ public function show(){ getResults(); while($stmt->fetchCollumn()){ ECHO RESULTS HERE }

22voto

pjbeardsley Points 643

L'exemple que vous avez fourni n'est pas du PHP valide et présente quelques problèmes :

public scoreTest() {
    ...
}

n'est pas une déclaration de fonction correcte. Vous devez déclarer les fonctions avec le mot-clé "function".

La syntaxe devrait plutôt être :

public function scoreTest() {
    ...
}

Deuxièmement, le fait d'envelopper les fonctions bigTest() et smallTest() dans public function() {} ne les rend pas privées - vous devez utiliser le mot-clé private pour chacune d'entre elles :

class test () {
    public function newTest(){
        $this->bigTest();
        $this->smallTest();
    }

    private function bigTest(){
        //Big Test Here
    }

    private function smallTest(){
           //Small Test Here
    }

    public function scoreTest(){
      //Scoring code here;
    }
}

De même, il est de convention de mettre la majuscule aux noms de classes dans les déclarations de classes ('Test').

J'espère que cela vous aidera.

3voto

Gumbo Points 279147

Vous devez appeler newTest pour rendre "visibles" les fonctions déclarées à l'intérieur de cette méthode (cf. Des fonctions dans les fonctions ). Mais ce ne sont alors que des fonctions normales et non des méthodes.

3voto

blockhead Points 4654

Pour avoir une "fonction dans une fonction", si je comprends ce que vous demandez, vous avez besoin de PHP 5.3, où vous pouvez profiter de la nouvelle fonctionnalité Closure.

Donc vous pourriez avoir :

public function newTest() {
   $bigTest = function() {
        //Big Test Here
   }
}

2voto

zloctb Points 531

exemple 1

class TestClass{
public function __call($name,$arg){
call_user_func($name,$arg);
}
}
class test {
     public function newTest(){

          function bigTest(){
               echo 'Big Test Here';
          }
          function smallTest(){
               echo 'Small Test Here';
          }

$obj=new TestClass;

return $obj;
     }

}
$rentry=new test;
$rentry->newTest()->bigTest();

exemple2

class test {
     public function newTest($method_name){

          function bigTest(){
               echo 'Big Test Here';
          }
          function smallTest(){
               echo 'Small Test Here';
          }

      if(function_exists( $method_name)){    
call_user_func($method_name);
      }
      else{
          echo 'method not exists';
      }
     }

}
$obj=new test;
$obj->newTest('bigTest')

0 votes

$rentry->newTest()->bigTest() ; $rentry->newTest()->smallTest() ; ---- Erreur fatale : Impossible de redéclarer bigTest() (précédemment déclaré.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X