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


108

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

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

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

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


2
Просто чтобы убедиться: функция и метод - это один и тот же метод function ===. Термин «метод» чаще используется в объектно-ориентированном языке для описания функции класса.
Маркус

Причина, по которой отсутствуют некоторые условия, заключается в том, что я уходил из офиса, поэтому у меня было мало времени.
WAC0020,

Ответы:


201

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

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
Можно ли запустить function()с другой страницы .php внутри функции класса, а затем получить результаты внутри функции класса? например, у меня есть запрос, который выбирает все из таблицы, а затем возвращает набор результатов выборки всего. Можно ли просмотреть этот набор результатов внутри функции классов? напримерclass query{ public function show(){ getResults(); while($stmt->fetchCollumn()){ ECHO RESULTS HERE }
James111

22

Предоставленный вами образец недействителен для 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;
    }
}

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

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


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

10

Я думаю, вы ищете что-то подобное.

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


3

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

Итак, у вас могло быть:

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

3

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

$this->smallTest();

Неустранимая ошибка: использование $ this вне контекста объекта
Стнфордли

2

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

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

$ rentry-> newTest () -> bigTest (); $ rentry-> newTest () -> smallTest (); ---- Неустранимая ошибка: невозможно повторно объявить bigTest () (объявлено ранее.
tfont

2

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


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

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

    f2();  

    }

вывод :

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.