web-dev-qa-db-fra.com

Appeler une fonction dans une méthode de classe?

J'ai essayé de comprendre comment faire cela mais je ne sais pas trop 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 avec laquelle je rencontre des problèmes, comment appeler bigTest ()?

99
WAC0020

Essaye celui-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();
192
Sergey Kuznetsov

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

public scoreTest() {
    ...
}

n'est pas une déclaration de fonction appropriée - vous devez déclarer des fonctions avec le mot clé 'function'.

La syntaxe devrait plutôt être:

public function scoreTest() {
    ...
}

Deuxièmement, encapsuler les fonctions bigTest () et smallTest () dans public function () {} ne les rend pas privées - vous devez utiliser le mot-clé private sur ces deux éléments individuellement:

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 plus, il est habituel de mettre les noms de classe en majuscule dans les déclarations de classe ('Test').

J'espère que ça t'as aidé.

20
pjbeardsley

Je pense que vous cherchez quelque chose comme celui-ci.

class test {

    private $str = NULL;

    public function newTest(){

        $this->str .= 'function "newTest" called, ';
        return $this;
    }
    public function bigTest(){

        return $this->str . ' function "bigTest" called,';
    }
    public function smallTest(){

        return $this->str . ' function "smallTest" called,';
    }
    public function scoreTest(){

        return $this->str . ' function "scoreTest" called,';
    }
}

$test = new test;

echo $test->newTest()->bigTest();
9
Ali Hasan
class test {
    public newTest(){
        $this->bigTest();
        $this->smallTest();
    }

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

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

    public scoreTest(){
      //Scoring code here;
    }
 }
7
Meganathan S

Pour appeler n'importe quelle méthode d'un objet instancié depuis une classe (avec statement new), vous devez "pointer" dessus. De l'extérieur, vous utilisez simplement la ressource créée par la nouvelle instruction. À l'intérieur de tout objet PHP créé par new, enregistre la même ressource dans la variable $ this. Ainsi, dans une classe, vous DEVEZ indiquer la méthode par $ this. Dans votre classe, pour appeler smallTest depuis l'intérieur de la classe, vous devez indiquer à PHP lequel des objets créés par la nouvelle instruction que vous souhaitez exécuter, écrivez simplement:

$this->smallTest();
4
Ingeniero

Vous devez appeler newTest pour rendre les fonctions déclarées dans cette méthode "visibles" (voir Fonctions dans les fonctions ). Mais ce ne sont alors que des fonctions normales et aucune méthode.

3
Gumbo

Pour avoir une "fonction dans une fonction", si je comprends ce que vous demandez, vous avez besoin de PHP5.3, où vous pourrez tirer parti de la nouvelle fonctionnalité Closure.

Donc vous pourriez avoir:

public function newTest() {
   $bigTest = function() {
        //Big Test Here
   }
}
3
blockhead
  class sampleClass
    { 
        public function f1()
        {
           return "f1 run";
        }

        public function f2()
        {
           echo ("f2 run" );
           $result =  $this->f1();
           echo ($result);
        }   

    f2();  

    }

sortie:

f2 run f1 run

3
Masoud Siahkali

Vous pouvez également utiliser self::CONST au lieu de $this->CONST si vous souhaitez appeler une variable statique ou une fonction de la classe en cours.

1
AlexioVay

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
zloctb