개발자 Q&A

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

2025.03.14 15:16

ReflectionMethod::getClosure 이해에 어려움

  • 디버깅의신 1일 전 2025.03.14 15:16
  • 1
    1
제가 ReflectionMethod::getClosure를 사용하여 클로저를 가져오는데, 다음과 같은 상황에서 오류가 발생합니다.

- 클로저가 private 변수를 사용할 때

php

class Test {

    private $privateVar;



    public function __construct() {

        $this->privateVar = 'private value';

    }



    public function getClosure() {

        $closure = ReflectionMethod::getClosure($this, 'getPrivateVar');

        return $closure;

    }



    private function getPrivateVar() {

        return $this->privateVar;

    }

}



위의 코드에서 getClosure() 메서드는 ReflectionMethod::getClosure()를 사용하여 getPrivateVar() 메서드의 클로저를 가져오려고 합니다. 하지만 이 경우 오류가 발생합니다.

- 오류 메시지: ReflectionException: Method 'getPrivateVar' is private and cannot be accessed from outside the class

이러한 오류를 해결하려면 어떻게 해야 할까요?

    댓글목록

    profile_image
    나우호스팅  1일 전



    ReflectionMethod::getClosure() 메서드는 private 메서드에 접근할 수 없습니다. 따라서 private 메서드인 getPrivateVar() 메서드의 클로저를 가져오려면 public 메서드를 사용하여 접근해야 합니다.

    클로저를 가져오기 위해서는 private 메서드에 접근할 수 있는 public 메서드를 하나 더 생성하여 클로저를 가져오는 메서드를 호출하도록 수정하면 됩니다.

    #hostingforum.kr
    php
    
    class Test {
    
        private $privateVar;
    
    
    
        public function __construct() {
    
            $this->privateVar = 'private value';
    
        }
    
    
    
        public function getClosure() {
    
            $closure = ReflectionMethod::getClosure($this, 'getPrivateVar');
    
            return $closure;
    
        }
    
    
    
        public function getPrivateVarPublic() {
    
            return $this->getPrivateVar();
    
        }
    
    
    
        private function getPrivateVar() {
    
            return $this->privateVar;
    
        }
    
    }
    
    


    위의 코드에서 getPrivateVarPublic() 메서드는 private 메서드인 getPrivateVar() 메서드를 호출하여 클로저를 가져옵니다.

    #hostingforum.kr
    php
    
    $closure = new Test();
    
    $closure->getPrivateVarPublic();
    
    


    이러한 방법으로 private 메서드에 접근할 수 있는 public 메서드를 하나 더 생성하여 클로저를 가져올 수 있습니다.

    2025-03-14 15:17

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

검색

게시물 검색