여기에서는 PHP 객체 지향의 정적 속성 및 정적 메서드 호출을 분석합니다. 그들의 부르심(부름받을 수 있는지, 어떻게 부르는지)에 관해서는 그들이 메모리의 어디에 저장되어 있는지를 이해해야 매우 이해하기 쉽습니다. 정적 속성 및 메서드(정적 및 비정적 포함)는 메모리에서 한 위치만 갖습니다(정적 속성이 아닌 인스턴스화된 개체만큼 많은 속성이 있음).
예:
?
3 4 56 7 |
<?php <🎜>< 🎜>헤더( "content-type:text/html;charset=utf-8" );
<🎜><🎜>클래스 인간{ <🎜><🎜> 정적 공개 $name = "여동생" <🎜><🎜> 공개 $height = 180 <🎜><🎜> 정적< /code><code>공개 함수 tell(){ <🎜><🎜> 에코</code ><code>self:: $name ; //정적 메서드는 self 키워드를 사용하여 정적 속성을 호출합니다.
<🎜><🎜> //echo $this->height;//틀렸습니다. 정적 메서드는 비정적 속성을 호출할 수 없습니다.
//$this는 인스턴스화된 객체를 나타내고 여기에 클래스가 있기 때문에 $this가 어떤 객체를 나타내는지 알 수 없습니다. 🎜> 코드>}
공개 함수 say(){ echo self:: $name . "내가 말했다" <code>; //일반 메소드는 self 키워드를 사용하여 정적 속성을 호출합니다.
echo $this ->height; 🎜> }
} $p1 = 새 인간(); $p1 ->say();
$p1 ->tell(); //객체는 정적 메서드에 액세스할 수 있습니다.
에코 $p1 :: $name ;<code>//객체는 정적 속성에 액세스합니다. 이와 같이 $p1->name에 액세스할 수 없습니다.
//정적 속성의 메모리 위치가 객체에 없기 때문에
Human::say(); //틀렸습니다. say() 메소드에 $this가 있으면 오류가 발생합니다. $this 없이 결과를 얻을 수 있습니다.
//그러나 php5.4 이상에서는 메시지가 표시됩니다.
?>
|