제발 코드 아래 고려 :클래스에서 초기화되지 않은 속성을 공개하는 이유는 무엇입니까?
class foo {
function bar() {
$this->baz = 'hello there!';
}
}
$f = new foo;
$f->bar();
echo $f->baz; // hello there!
왜 코드가 작동 이상합니까? 나는 $baz
변수를 초기화하지 않았고 __get
및 __set
마법 메서드를 사용하지 않는다는 것을 의미합니다. 나는 그것이 나에게 오류를 줄 것이라고 기대하고 있었지만, $baz
이 생성되었고 public
가시성이 할당 된 것으로 보인다. (BTW는 정적 컨텍스트에서 오류를 발생시킵니다.)
__get 및 __set 마법 메서드는 가시성 범위 외부에서 속성에 액세스하는 경우에만 호출됩니다. 클래스 자체에 baz를 할당하면 호출되지 않습니다. http://stackoverflow.com/questions/18126801/quirky-set-magic-function –
PHP의 설계자는 존재하지 않는 속성에 할당 된 경우 PHP의 디자이너가 새 속성을 만들도록 선택했기 때문에이를 참고하십시오. 같은 방식으로 값을 할당하는 것은 이미 존재하지 않는다면 새로운 지역 변수를 만듭니다 ... 그리고 기본적으로 public이 아닌 다른 것을 만드는 것은 덜 유용 할 것입니다 –