2011-01-12 3 views
1

PHP : ClassName :: method 구문을 통해 인스턴스 메서드를 호출하면 정적 호출이 발생합니까?

그녀는 내 코드입니다.

class MyClass 
{ 
    public $prop; 
    public function method() 
    { 
    echo $this->prop; 
    } 
} 

그러면 실수로 다음과 같은 코드가 나타납니다.

MyClass::method(); 

호출 된 메서드가 정적이 아니기 때문에 위의 행에 대한 해석 오류가 발생할 것으로 예상됩니다. 대신 메서드가 호출되었고 기존에 존재하지 않는 $ prop에 대한 예외가 발생했습니다. 그래서 메서드가 정적 메서드로 호출되었음을 이해합니다.

이 방법으로 작동합니까? (왜 지옥?)

+0

오류보고를 확인하십시오. 숨겨져있을 수 있습니다. 주 파일 근처에서 error_log를 찾으십시오. – RobertPitt

답변

4

정적이 아닌 메서드를 호출하면 E_STRICT 수준 경고가 정적으로 생성됩니다. http://php.net/manual/en/language.oop5.static.php

난 당신이 E_STRICT 경고를 억제 있다고 가정합니다. 그것은 작동합니다 (레거시 이유로), 권장하지 않습니다.

4

레거시 이유로 인해 이전에 선언 할 수 없었기 때문에 어떤 클래스 메서드도 static으로 선언되지 않았더라도 정적으로 호출 할 수있었습니다. 이 경우 $this은 객체 컨텍스트 변수가 아니기 때문에 아무 것도 참조하지 않습니다.

PHP 5에서는 방금 정적 메서드를 정적으로 호출하는 것에 대한 경고가 E_STRICT이됩니다.

관련 문제