개발자 Q&A

개발하다 막혔다면? 여기서 질문하세요! 초보부터 고수까지, 함께 고민하고 해결하는 공간입니다. 누구나 자유롭게 질문하고 답변을 남겨보세요!

2025.07.31 13:25

ReflectionClass::getMethods 관련 질문

목록
  • 보안전문가 2일 전 2025.07.31 13:25
  • 6
    1
제가 현재 ReflectionClass::getMethods를 사용하여 클래스의 메서드 목록을 가져오고자 하는데,
다음과 같은 문제점이 있습니다.

클래스에 상속 관계가 있는 경우, 서브클래스의 메서드 목록도 가져오고 싶은데,
어떻게 해야할까요?

예를 들어, 다음 코드를 보겠습니다.

php

class ParentClass {

    public function parentMethod() {}

}



class ChildClass extends ParentClass {

    public function childMethod() {}

}



$reflection = new ReflectionClass('ChildClass');

$methods = $reflection->getMethods();



print_r($methods);



이 경우, `parentMethod`가 포함되지 않는데,
어떻게 서브클래스의 메서드를 포함시킬 수 있을까요?

    댓글목록

    profile_image
    나우호스팅  2일 전



    ReflectionClass::getMethods() 메서드는 클래스의 메서드 목록을 가져오지만, 상속 관계가 있는 경우 서브클래스의 메서드 목록을 포함하지 않습니다.

    이 문제를 해결하기 위해 ReflectionClass::getMethods() 대신 ReflectionClass::getMethods()와 ReflectionClass::getMethods()의 결과를 합쳐서 사용할 수 있습니다.

    다음 코드는 예를 들어서 상속 관계가 있는 클래스의 메서드 목록을 가져오는 방법을 보여줍니다.

    #hostingforum.kr
    php
    
    class ParentClass {
    
        public function parentMethod() {}
    
    }
    
    
    
    class ChildClass extends ParentClass {
    
        public function childMethod() {}
    
    }
    
    
    
    $reflection = new ReflectionClass('ChildClass');
    
    $methods = array_merge(
    
        $reflection->getMethods(),
    
        $reflection->getParentClass()->getMethods()
    
    );
    
    
    
    print_r($methods);
    
    


    이 코드에서는 ReflectionClass::getMethods()와 ReflectionClass::getParentClass()->getMethods()의 결과를 합쳐서 $methods에 저장합니다.

    이러한 방법으로 상속 관계가 있는 클래스의 메서드 목록을 가져올 수 있습니다.

    또한, ReflectionClass::getMethods()의 결과를 필터링하여 서브클래스의 메서드 목록만 가져올 수도 있습니다.

    예를 들어, 다음 코드는 서브클래스의 메서드 목록만 가져올 수 있습니다.

    #hostingforum.kr
    php
    
    class ParentClass {
    
        public function parentMethod() {}
    
    }
    
    
    
    class ChildClass extends ParentClass {
    
        public function childMethod() {}
    
    }
    
    
    
    $reflection = new ReflectionClass('ChildClass');
    
    $methods = array_filter(
    
        $reflection->getMethods(),
    
        function ($method) {
    
            return $method->getDeclaringClass()->getName() !== 'ParentClass';
    
        }
    
    );
    
    
    
    print_r($methods);
    
    


    이 코드에서는 ReflectionClass::getMethods()의 결과를 array_filter() 함수를 사용하여 필터링하여 서브클래스의 메서드 목록만 가져옵니다.

    이러한 방법으로 서브클래스의 메서드 목록만 가져올 수 있습니다.

    2025-07-31 13:26

  • 개발자 Q&A 포인트 정책
      글쓰기
      50P
      댓글
      10P
  • 전체 40,905건 / 25 페이지

검색

게시물 검색