2014-03-28 2 views
0

제발 코드 아래 고려 :클래스에서 초기화되지 않은 속성을 공개하는 이유는 무엇입니까?

class foo { 
    function bar() { 
     $this->baz = 'hello there!'; 
    } 
} 

$f = new foo; 
$f->bar(); 
echo $f->baz; // hello there! 

왜 코드가 작동 이상합니까? 나는 $baz 변수를 초기화하지 않았고 __get__set 마법 메서드를 사용하지 않는다는 것을 의미합니다. 나는 그것이 나에게 오류를 줄 것이라고 기대하고 있었지만, $baz이 생성되었고 public 가시성이 할당 된 것으로 보인다. (BTW는 정적 컨텍스트에서 오류를 발생시킵니다.)

+0

__get 및 __set 마법 메서드는 가시성 범위 외부에서 속성에 액세스하는 경우에만 호출됩니다. 클래스 자체에 baz를 할당하면 호출되지 않습니다. http://stackoverflow.com/questions/18126801/quirky-set-magic-function –

+0

PHP의 설계자는 존재하지 않는 속성에 할당 된 경우 PHP의 디자이너가 새 속성을 만들도록 선택했기 때문에이를 참고하십시오. 같은 방식으로 값을 할당하는 것은 이미 존재하지 않는다면 새로운 지역 변수를 만듭니다 ... 그리고 기본적으로 public이 아닌 다른 것을 만드는 것은 덜 유용 할 것입니다 –

답변

5

http://www.php.net/manual/en/language.oop5.visibility.php$this->baz = 'hello there!'; 이 방법을 객체 지향 개념 works.You가에 대한 인스턴스를 생성하는 클래스를 선언하는 클래스를 호출하고 해당 함수에 액세스하고 마지막으로 해당 멤버 함수의 변수를 반향합니다. 객체 방향이 작동하는 방식입니다.

2

PHP의 작동 방식 때문입니다. 초기화되지 않은 속성을 설정하면 __set이 없어도 만들어집니다. 반면에 초기화되지 않은 속성을 읽으려고하면 경고로 끝납니다.

1

기본적으로 공개로 설정됩니다.

이 링크를 참조하십시오 당신은 당신은 문에 의해 초기화 한 초기화되지 않습니다 말했다

관련 문제