
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