[php] 클래스 메서드 내에서 함수를 호출합니까?

나는 이것을하는 방법을 알아 내려고 노력했지만 어떻게하는지 잘 모르겠습니다.

다음은 내가하려는 작업의 예입니다.

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() {
    ...
}

둘째, public function () {}에 bigTest () 및 smallTest () 함수를 래핑해도이를 비공개로 만들지 않습니다. 두 가지 모두에 개별적으로 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;
    }
}

또한 클래스 선언 ( ‘Test’)에서 클래스 이름을 대문자로 사용하는 것이 관례입니다.

도움이 되었기를 바랍니다.


답변

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


답변

나는 당신이 이와 같은 것을 찾고 있다고 생각합니다.

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


답변

newTest해당 메서드 내에서 선언 된 함수를 “표시” 하려면 호출해야합니다 ( 함수 내 함수 참조 ). 그러나 그것은 정상적인 기능이며 방법은 없습니다.


답변

“함수 내 기능”을 갖기 위해, 내가 당신이 요구하는 것을 이해한다면, 새로운 Closure 기능을 활용할 수있는 PHP 5.3이 필요합니다.

따라서 다음을 가질 수 있습니다.

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


답변

클래스에서 인스턴스화 된 객체의 메서드 (new 문 사용)를 호출하려면이를 “가리켜 야”합니다. 외부에서 당신은 단지 새로운 문에 의해 생성 된 자원을 사용합니다. new에 의해 생성 된 PHP 개체 내에서 동일한 리소스를 $ this 변수에 저장합니다. 따라서 클래스 내에서 $ this로 메서드를 가리켜 야합니다. 클래스 smallTest에서 클래스 내부에서 호출 하려면 실행하려는 새 명령문에 의해 생성 된 모든 객체를 PHP에 알려야합니다.

$this->smallTest();