소개
PHP를 사용하면 클래스에서 마법 메서드 를 선언하여 메서드 호출 및 속성 액세스 를 오버로드 할 수 있습니다 . 이를 통해 다음과 같은 코드를 사용할 수 있습니다.
class Foo {
public function __get($name) { return 42; }
}
$foo = new Foo;
echo $foo->missingProperty; // prints "42"
PHP 5.3.0부터 인스턴스 속성과 메소드를 오버로드하는 것 외에도 static
magic 메소드를 오버라이드하여 메소드 호출을 오버 로드 할 수 있습니다 __callStatic
.
누락 된 뭔가
사용 가능한 기능에서 눈에 띄지 않는 점은 정적 속성 을 오버로드하는 기능입니다 .
echo Foo::$missingProperty; // fatal error: access to undeclared static property
이 제한은 명확하게 문서화되어 있습니다 :
속성 오버로딩은 개체 컨텍스트에서만 작동합니다. 이러한 매직 메소드는 정적 컨텍스트에서 트리거되지 않습니다. 따라서 이러한 방법을 선언해서는 안됩니다
static
. PHP 5.3.0부터 매직 오버로드 메소드 중 하나가 선언되면 경고가 발행됩니다static
.
그런데 왜?
내 질문은 :
- 이 기능이 현재 지원되지 않는 기술적 이유가 있습니까? 아니면 (거대한) 정치적 이유일까요?
- 과거에이 기능을 추가하려는 중단 된 시도가 있었습니까?
가장 중요한 점 은 "userland PHP에서 동적 정적 속성을 어떻게 가질 수 있습니까?" 라는 질문 이 아닙니다 . 즉, __callStatic
공유하고 싶은 것을 기반으로 특히 귀여운 구현을 알고 있다면 반드시 그렇게하십시오.
__getStatic()
과__setStatic()
에 정적 클래스, 여전히 인스턴스화 할 클래스에 대해이 기능이 유용 할 것입니다. 이 방향으로의 움직임에 대해 알고 있습니까?