Chamar uma função dentro de um método de classe?

Tenho tentado descobrir como fazer isto, mas não sei bem como.

Eis um exemplo do que estou a tentar fazer:
class test {
     public newTest(){
          function bigTest(){
               //Big Test Here
          }
          function smallTest(){
               //Small Test Here
          }
     }
     public scoreTest(){
          //Scoring code here;
     }
}

Aqui está a parte com a qual estou a ter problemas, como é que chamo o bigTest()?

Author: tshepang, 2009-11-12

10 answers

Tenta este.
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();
 204
Author: Sergey Kuznetsov, 2009-11-12 20:38:36

A amostra que forneceu não é válida para o PHP e tem alguns problemas:

public scoreTest() {
    ...
}

Não é uma declaração de função adequada -- você precisa declarar funções com a palavra-chave' função'.

A sintaxe deve ser:

public function scoreTest() {
    ...
}

Em segundo lugar, envolver as funções bigTest() e smallTest () na função pública () {} não as torna privadas - você deve usar a palavra-chave privada em ambos individualmente:

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;
    }
}
Além disso, é Convenção capitalizar nomes de classes em declarações da classe ("ensaio"). Espero que isso ajude.
 22
Author: pjbeardsley, 2009-11-12 20:48:19
Acho que estás à procura de algo como este.
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();
 11
Author: Ali Hasan, 2015-09-06 04:51:57
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;
    }
 }
 11
Author: Meganathan S, 2017-07-13 11:21:16

É necessário chamar newTest para tornar as funções declaradas dentro desse método "visíveis" (ver funções dentro das funções). Mas isso são apenas funções normais e sem métodos.

 3
Author: Gumbo, 2009-11-12 20:35:11

A fim de ter uma "função dentro de uma função", se eu entender o que você está pedindo, você precisa de PHP 5.3, onde você pode tirar proveito do novo recurso de encerramento.

Então podias ter ...
public function newTest() {
   $bigTest = function() {
        //Big Test Here
   }
}
 3
Author: blockhead, 2009-11-12 20:39:24

Para chamar qualquer método de um objeto instanciado a partir de uma classe (com Declaração nova), você precisa "apontar" para ela. Do lado de fora você apenas usa o recurso criado pela nova declaração. Dentro de qualquer objeto PHP criado por new, grava o mesmo recurso na $this variable. Então, dentro de uma aula você deve apontar para o método por $isso. Em sua classe, para chamar smallTest de dentro da classe, você deve dizer ao PHP qual de todos os objetos criados pela nova declaração que você deseja executar, apenas escrever:

$this->smallTest();
 3
Author: Ingeniero, 2014-12-24 17:17:03

Exemplo 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();

Exemplo 2

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')
 2
Author: zloctb, 2013-10-07 19:20:30

Também pode usar self::CONST em vez de $this->CONST se quiser chamar uma variável estática ou uma função da classe actual.

 2
Author: AlexioVay, 2016-08-23 17:25:09
  class sampleClass
    { 
        public function f1()
        {
           return "f1 run";
        }

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

    f2();  

    }

Resultado:

F2 executar F1 run

 2
Author: Masoud Siahkali, 2016-12-10 13:25:03