개발자 Q&A

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

2025.06.01 05:13

ReflectionConstant::__toString() 메소드 이해를 부탁드립니다.

목록
  • 엔지니어링고수 오래 전 2025.06.01 05:13
  • 92
    1
제가 ReflectionConstant 클래스를 사용하여 클래스의 상수 값을 가져오려고 하는데, __toString() 메소드를 사용하여 값을 출력하려고 합니다. 하지만 __toString() 메소드가 호출될 때마다 ReflectionClass가 초기화되는 것처럼 보입니다. 이게 정상적인 동작인가요? 그리고 __toString() 메소드를 호출할 때마다 ReflectionClass를 초기화하는 방법은 없나요?

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

php

class MyClass {

    const MY_CONSTANT = 'Hello, World!';

}



$reflectionClass = new ReflectionClass('MyClass');

$constant = $reflectionClass->getConstant('MY_CONSTANT');



echo $constant . "n"; // Hello, World!



echo $reflectionClass->getName() . "n"; // MyClass



echo $reflectionClass->getName() . "n"; // MyClass



위 코드에서 두 번째 `echo` 문에서 `$reflectionClass->getName()`이 호출될 때마다 ReflectionClass가 초기화되는 것처럼 보입니다. 이게 정상적인 동작인가요? 그리고 __toString() 메소드를 호출할 때마다 ReflectionClass를 초기화하는 방법은 없나요?

    댓글목록

    profile_image
    나우호스팅  오래 전



    ReflectionClass는 PHP의 내장 클래스로, 클래스의 정보를 조회할 수 있도록 도와줍니다. ReflectionClass의 인스턴스는 생성될 때 클래스의 정보를 캐시합니다.

    __toString() 메소드는 클래스의 정보를 문자열로 반환합니다. 이 메소드는 ReflectionClass의 인스턴스가 생성될 때마다 호출되지 않습니다.

    하지만, ReflectionClass의 인스턴스를 여러 번 생성하고, getName() 메소드를 호출할 때마다 ReflectionClass가 초기화되는 것처럼 보일 수 있습니다.

    이것은 PHP의 내장 클래스인 ReflectionClass가 캐시를 사용하지 않기 때문입니다. 캐시는 클래스의 정보를 메모리에 저장하여 다음번에 클래스의 정보가 필요할 때 캐시에서 정보를 가져올 수 있도록 해줍니다.

    캐시를 사용하지 않는 이유는 ReflectionClass가 클래스의 정보를 캐시할 때, 클래스의 정보가 변경될 수 있기 때문입니다.

    캐시를 사용하지 않기 때문에, ReflectionClass의 인스턴스를 여러 번 생성하고, getName() 메소드를 호출할 때마다 ReflectionClass가 초기화되는 것처럼 보일 수 있습니다.

    __toString() 메소드를 호출할 때마다 ReflectionClass를 초기화하는 방법은 없습니다. 하지만, ReflectionClass의 인스턴스를 한 번만 생성하고, getName() 메소드를 호출할 때마다 캐시에서 정보를 가져올 수 있도록 해줄 수 있습니다.

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

    #hostingforum.kr
    php
    
    class MyClass {
    
        const MY_CONSTANT = 'Hello, World!';
    
    }
    
    
    
    $reflectionClass = new ReflectionClass('MyClass');
    
    $constant = $reflectionClass->getConstant('MY_CONSTANT');
    
    
    
    echo $constant . "n"; // Hello, World!
    
    
    
    $reflectionClass2 = $reflectionClass;
    
    echo $reflectionClass2->getName() . "n"; // MyClass
    
    echo $reflectionClass2->getName() . "n"; // MyClass
    
    


    위 코드에서, ReflectionClass의 인스턴스를 한 번만 생성하고, getName() 메소드를 호출할 때마다 캐시에서 정보를 가져올 수 있도록 해줍니다.

    2025-06-01 05:14

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

검색

게시물 검색