개발자 Q&A

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

2025.08.07 00:23

ReflectionMethod::getPrototype에 대한 질문

목록
  • 프론트엔드기사 17시간 전 2025.08.07 00:23 새글
  • 2
    1
제가 ReflectionMethod::getPrototype 함수를 사용해 보았는데, 이해하기가 조금 어려워요.

getPrototype 메소드는 어떤 역할을 하는 걸까요?
그리고 이 메소드를 사용할 때 어떤 주의점이 있는지 알려주세요.

예를 들어, 어떤 클래스를 만들고 그 클래스의 인스턴스를 만들면,
그 인스턴스는 클래스의 프로토타입을 참조하고 있나요?

그리고 프로토타입이란 무엇이며, 어떻게 사용할 수 있는지 알려주세요.

다음은 예시 코드입니다.

php

class Animal {

    public function sound() {

        echo '동물이 웁니다.';

    }

}



class Dog extends Animal {

    public function sound() {

        echo '개가 웁니다.';

    }

}



$dog = new Dog();

$dog->sound();



$prototype = ReflectionClass::getReflectionClass('Animal')->getPrototype();



위 코드에서 `$prototype`는 무엇을 참조하고 있나요?

위 질문을 통해 ReflectionMethod::getPrototype 함수를 사용하는 방법과 주의점을 알려주시면 감사하겠습니다.

    댓글목록

    profile_image
    나우호스팅  17시간 전



    ReflectionMethod::getPrototype 함수는 클래스의 프로토타입을 반환하는 함수입니다. 프로토타입은 클래스의 부모 클래스를 의미하며, 자바스크립트와 같은 언어에서는 Prototype Chain 이라고도 합니다.

    이 함수를 사용할 때 주의할 점은, 프로토타입은 클래스의 부모 클래스를 참조하므로, 프로토타입을 수정하면 클래스의 모든 인스턴스가 영향을 받을 수 있습니다.

    예를 들어, 위 코드에서 Animal 클래스의 sound() 메소드를 수정하면, Dog 클래스의 인스턴스도 sound() 메소드가 수정된 것을 참조하게 됩니다.

    프로토타입을 사용하는 방법은 다음과 같습니다.

    1. ReflectionClass::getReflectionClass() 함수를 사용하여 클래스의 ReflectionClass 객체를 얻습니다.
    2. getPrototype() 함수를 사용하여 클래스의 프로토타입을 얻습니다.

    위 코드에서 `$prototype`는 Animal 클래스의 프로토타입을 참조하고 있습니다. 따라서 `$prototype`는 Animal 클래스의 모든 메소드와 속성을 참조할 수 있습니다.

    주의할 점은, 프로토타입을 수정하면 클래스의 모든 인스턴스가 영향을 받을 수 있으므로, 주의해서 사용해야 합니다.

    #hostingforum.kr
    php
    
    class Animal {
    
        public function sound() {
    
            echo '동물이 웁니다.';
    
        }
    
    }
    
    
    
    class Dog extends Animal {
    
        public function sound() {
    
            echo '개가 웁니다.';
    
        }
    
    }
    
    
    
    $dog = new Dog();
    
    $dog->sound();
    
    
    
    $prototype = ReflectionClass::getReflectionClass('Animal')->getPrototype();
    
    
    
    // 프로토타입을 수정하면 클래스의 모든 인스턴스가 영향을 받습니다.
    
    $prototype->getMethod('sound')->setAccessible(true);
    
    $prototype->getMethod('sound')->invokeArgs(new Animal(), array());
    
    
    
    // 결과: 동물이 웁니다.
    
    

    2025-08-07 00:24

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

검색

게시물 검색