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


108

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

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

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

문제가있는 부분은 다음과 같습니다. bigTest ()를 어떻게 호출합니까?


2
확인하기 위해 : 함수와 메서드는 정확히 동일한 함수 === 메서드입니다. 메소드라는 용어는 클래스의 기능을 설명하기 위해 OO 언어에서 더 자주 사용됩니다.
markus

용어 중 일부가 누락 된 이유는 제가 퇴근하는 도중에 시간이 부족했기 때문입니다.
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() {
    ...
}

둘째, 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')에서 클래스 이름을 대문자로 사용하는 것이 관례입니다.

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


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

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


3

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

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

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

3

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

$this->smallTest();

치명적인 오류 : 개체 컨텍스트가 아닐 때 $ this 사용
Stnfordly

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 실행

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.