Подтвердить что ты не робот

Вызов функции в методе класса?

Я пытался выяснить, как это сделать, но я не совсем уверен, как это сделать.

Вот пример того, что я пытаюсь сделать:

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

Вот часть, с которой у меня возникают проблемы, как я могу назвать bigTest()?

4b9b3361

Ответ 1

Попробуйте следующее:

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

Ответ 2

Образец, который вы предоставили, недействителен PHP и имеет несколько проблем:

public scoreTest() {
    ...
}

не является объявлением функции - вам нужно объявить функции с ключевым словом "function".

Синтаксис должен быть скорее:

public function scoreTest() {
    ...
}

Во-вторых, обертывание функций bigTest() и smallTest() в public function() {} не делает их закрытыми - вы должны использовать личное ключевое слово по обоим из них отдельно:

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;
    }
}

Кроме того, это соглашение, чтобы капитализировать имена классов в объявлениях классов ( "Тест" ).

Надеюсь, что это поможет.

Ответ 3

Я думаю, что вы ищете что-то вроде этого.

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

Ответ 4

Чтобы вызвать любой метод объекта, созданного экземпляром класса (с инструкцией new), вам нужно "указать" на него. С внешней стороны вы просто используете ресурс, созданный новым оператором. Внутри любого объекта PHP, созданного новым, сохраняется тот же ресурс в переменной $this. Итак, внутри класса вы ДОЛЖНЫ указывать на метод $this. В своем классе, чтобы вызвать smallTest изнутри класса, вы должны указать PHP, какой из всех объектов, созданных новым оператором, который вы хотите выполнить, просто напишите:

$this->smallTest();

Ответ 5

Вам нужно вызвать newTest, чтобы функции, объявленные внутри этого метода, были "видимыми" (см. Функции внутри функций). Но это только обычные функции и методы.

Ответ 6

Чтобы иметь "функцию внутри функции", если я понимаю, что вы просите, вам нужен PHP 5.3, где вы можете воспользоваться новой функцией Closure.

Итак, вы могли бы:

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

Ответ 7

  class sampleClass
    { 
        public function f1()
        {
           return "f1 run";
        }

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

    f2();  

    }

вывод:

f2 запустить f1 запустить

Ответ 8

Вы также можете использовать self::CONST вместо $this->CONST, если вы хотите вызвать статическую переменную или функцию текущего класса.

Ответ 9

пример 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();

example2

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')

Ответ 10

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;
    }
 }