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

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

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

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

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

    Попробуй это:

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

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

     public scoreTest() { ... } 

    не является надлежащим объявлением функции – вам нужно объявить функции с ключевым словом «function».

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

     public function scoreTest() { ... } 

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

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

    Кроме того, принято утверждать, что имена классов называются в объявлениях классов («Тест»).

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

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

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

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

     $this->smallTest(); 

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

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

    Таким образом, вы могли бы:

     public function newTest() { $bigTest = function() { //Big Test Here } } 
      class sampleClass { public function f1() { return "f1 run"; } public function f2() { echo ("f2 run" ); $result = $this->f1(); echo ($result); } f2(); } 

    вывод :

    Запуск f2 запустите f1

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

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