
ReflectionClass::getLazyInitializer는 PHP 8.1에서 추가된 메서드입니다. 이 메서드는 클래스의 속성을 초기화하는 데 사용되는 Lazy Initializer를 반환합니다.
Lazy Initializer는 속성을 초기화하는 것을 지연시키는 기술입니다. 속성이 실제로 사용될 때까지 초기화되지 않으며, 속성이 사용될 때 초기화됩니다.
예를 들어, 다음 코드를 살펴보겠습니다.
#hostingforum.kr
php
class User {
private string $name;
public function __construct() {
$this->name = '';
}
public function getName(): string {
return $this->name;
}
}
위 코드에서, `User` 클래스의 `name` 속성은 생성자에서 초기화됩니다. 그러나, 이 속성을 초기화하는 것을 지연시키고 싶다면, Lazy Initializer를 사용할 수 있습니다.
#hostingforum.kr
php
class User {
private string $name;
public function __construct() {
$this->name = '';
}
public function getName(): string {
return $this->name;
}
public function setName(string $name): void {
$this->name = $name;
}
}
위 코드에서, `setName` 메서드는 `name` 속성을 초기화합니다. 그러나, 이 속성을 초기화하는 것을 지연시키고 싶다면, Lazy Initializer를 사용할 수 있습니다.
#hostingforum.kr
php
class User {
private string $name;
public function __construct() {
$this->name = '';
}
public function getName(): string {
return $this->name;
}
public function setName(string $name): void {
$this->name = $name;
}
private function lazyName(): string {
return $this->name;
}
}
위 코드에서, `lazyName` 메서드는 Lazy Initializer입니다. 이 메서드는 `name` 속성을 초기화합니다. 그러나, 이 속성을 초기화하는 것을 지연시키기 때문에, `name` 속성이 실제로 사용될 때까지 초기화되지 않습니다.
#hostingforum.kr
php
$user = new User();
echo $user->getName(); // ''
$user->setName('John');
echo $user->getName(); // 'John'
위 코드에서, `getName` 메서드는 `name` 속성을 초기화하지 않습니다. 그러나, `setName` 메서드는 `name` 속성을 초기화합니다. 이로 인해, `name` 속성이 실제로 사용될 때까지 초기화되지 않습니다.
ReflectionClass::getLazyInitializer는 이러한 Lazy Initializer를 반환합니다. 예를 들어,
#hostingforum.kr
php
$reflectionClass = new ReflectionClass(User::class);
$lazyInitializer = $reflectionClass->getLazyInitializer('name');
$user = new User();
echo $lazyInitializer->invoke($user); // ''
$user->setName('John');
echo $lazyInitializer->invoke($user); // 'John'
위 코드에서, `getLazyInitializer` 메서드는 Lazy Initializer를 반환합니다. 이 Lazy Initializer는 `name` 속성을 초기화합니다. 그러나, 이 속성을 초기화하는 것을 지연시키기 때문에, `name` 속성이 실제로 사용될 때까지 초기화되지 않습니다.
2025-05-20 22:35