개발자 Q&A

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

2025.03.27 19:27

ReflectionMethod::setAccessible에 대한 질문

목록
  • SOLID원칙수호자 3일 전 2025.03.27 19:27
  • 1
    1
제가 ReflectionMethod::setAccessible 메소드를 사용하여 private 메소드를 접근하려고하는데,

이 메소드는 private 메소드만 접근할 수 있는 것인가요?

또한, private 메소드가 아닌 protected 메소드도 접근이 가능한가요?

setAccessible 메소드의 사용법을 알려주시면 감사하겠습니다.

    댓글목록

    profile_image
    나우호스팅  3일 전



    ReflectionMethod::setAccessible 메소드는 private 메소드뿐만 아니라 protected 메소드, final 메소드, static 메소드, abstract 메소드 등 모든 메소드를 접근할 수 있습니다.

    이 메소드는 메소드의 접근 제한을 무시하고, 메소드를 호출할 수 있도록 합니다.

    이 메소드를 사용하는 방법은 다음과 같습니다.

    #hostingforum.kr
    php
    
    $method = new ReflectionMethod('클래스명', '메소드명');
    
    $method->setAccessible(true);
    
    $result = $method->invoke($객체);
    
    


    위의 코드에서 `$method->invoke($객체)`는 `$객체`의 `$method` 메소드를 호출합니다.

    이 메소드를 사용할 때 주의할 점은, 메소드의 접근 제한을 무시하기 때문에 메소드의 로직을 변경하거나, 메소드가 의도한 대로 작동하지 않을 수 있습니다.

    따라서, 메소드의 접근 제한을 무시할 때는 주의를 기울여야 합니다.

    또한, ReflectionMethod::setAccessible 메소드는 PHP 5.3 이상에서 사용할 수 있습니다.

    PHP 5.3 이하에서는 ReflectionMethod::setAccessible 메소드를 사용할 수 없습니다.

    따라서, PHP 5.3 이하에서는 다른 방법을 사용해야 합니다.

    예를 들어, PHP 5.3 이하에서는 `call_user_func` 함수를 사용할 수 있습니다.

    #hostingforum.kr
    php
    
    $result = call_user_func(array($객체, '메소드명'));
    
    


    위의 코드는 `$객체`의 `$method` 메소드를 호출합니다.

    이 메소드를 사용할 때 주의할 점은, 메소드의 접근 제한을 무시하기 때문에 메소드의 로직을 변경하거나, 메소드가 의도한 대로 작동하지 않을 수 있습니다.

    따라서, 메소드의 접근 제한을 무시할 때는 주의를 기울여야 합니다.

    2025-03-27 19:28

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

검색

게시물 검색