>  기사  >  백엔드 개발  >  PHP에서 this, self, parent 세 가지 키워드의 차이점과 비교

PHP에서 this, self, parent 세 가지 키워드의 차이점과 비교

WBOY
WBOY원래의
2016-08-08 09:30:55952검색
this, self, parent라는 세 개의 키워드는 각각 this, self, father를 지칭하므로 문자 그대로 이해하기가 더 쉽습니다.
이것은 현재 객체에 대한 포인터입니다(C에서는 포인터를 사용하겠습니다)
self는 현재 클래스에 대한 포인터입니다
Parent는 상위 클래스에 대한 포인터입니다(이보다 더 좋은 표현 언어가 없기 때문에 여기서는 포인터를 사용하여 설명하는 경우가 많습니다)
실제 사례를 바탕으로 살펴보겠습니다
(1) 이
1
2
3 클래스 UserName
4 {
5 //멤버 속성 정의
6 private $name;
7
8 //생성자 정의
9 function __construct( $name )
10 {
11 $this-> name = $name; //이 포인터는 여기서 사용되었습니다
12 }
13
14 //소멸자
15 함수 __destruct(){}
16
17 //사용자 이름 멤버 함수 인쇄
18 함수 printName()
19 {
20 print( $this->name ) // 이 포인터가 다시 사용됩니다
21 }
22 }
23
24 //객체 인스턴스화
25 $nameObject = new UserName( "heiyeluren" );
26
27 //인쇄 실행
28 $nameObject-> ;printName() ; //출력: heiyeluren
29
30 //객체의 두 번째 인스턴스화
31 $nameObject2 = new UserName( "PHP5 " );
32
33 //인쇄 실행
34 $nameObject2->printName( ); //출력: PHP5
35 ?>
위 클래스가 각각 라인 11과 20에서 이 포인터를 사용하는 것을 볼 수 있습니다. 그러면 이 포인터는 누구에게 전달됩니까?
실제로 인스턴스화할 때 개체가 누구를 가리키는지 결정합니다. 예를 들어 객체가 처음으로 인스턴스화되면(라인 25)
다음과 같습니다. $nameObject 객체를 가리키는 경우 18행에서 인쇄할 때 print( $this->name )가 print( $nameObject->name )로 변경되고 물론 "heiyeluren"이 출력됩니다.
두 번째 경우 print( $this- >name )는 print( $nameObject2->name )가 되므로 "PHP5"가 출력됩니다.
따라서 이는 현재 개체 인스턴스에 대한 포인터이며 다른 개체나 클래스를 가리키지 않습니다.
(2)self
우선 self는 클래스 자체를 가리킨다는 점, 즉 self는 인스턴스화된 클래스 자체를 가리키지 않는다는 점을 분명히 해야 합니다. 일반적으로 self는 클래스의 정적 변수를 가리키는 데 사용됩니다.
1
2
3클래스 카운터
4 {
5 ~ > 12 $this->lastCount = ++selft::$firstCount //self를 사용하여 self를 호출할 때는 다음을 사용해야 합니다.:(필드 연산 기호)
13 }
14
15                                   ~                🎜 >17                 🎜>
21
22 //인스턴스화된 객체
23 $countObject = new Counter();
24
25 $countObject->printLastCount(); //출력 1
26
27 ?>
여기서는 6행과 12행 두 곳만 주목하면 됩니다.
두 번째 줄에 $firstCount 정적 변수를 정의했고 초기 값은 0입니다. 그런 다음 12번째 줄에서 이 값을 호출했습니다. self를 사용하여 호출하고 ":"를 사용하여 연결했습니다. ,
은 우리가 도메인 연산자라고 부르는 것이므로 이때 우리가 부르는 것은 클래스 자체에서 정의한 정적 변수 $frestCount 이며 우리의 정적 변수는 다음의 인스턴스와 관련이 없습니다. 객체는 클래스에만 관련되어 있습니다.
그러면 클래스 자체를 호출하면 이를 참조하는 데 사용할 수 없고 self를 참조하는 데 사용할 수 있습니다.
self는 객체 인스턴스가 아닌 클래스 자체를 가리키기 때문입니다. 즉, 클래스에 정적 멤버가 있는 경우 self를 사용하여 해당 멤버를 호출해야 합니다.
(3)parent
부모는 부모 클래스에 대한 포인터라는 것을 알고 있습니다. 일반적으로 부모를 사용하여 부모 클래스의 생성자를 호출합니다.
1
2
3 //기본 클래스
4 클래스 동물
5 {
6 //기본 클래스의 속성
7 public $name; //이름
8
9 //기본 클래스의 생성자 함수
10 공개 함수 __construct( $name )
11 {
12 } $this->name = $name;
13 }
14 }
15
16 //파생 클래스
17 클래스 Person이 Animal을 확장함 //Person 클래스가 Animal 클래스를 상속함
18 {
19 공개 $personSex; //성별
20 공개 $personAge; //나이
21
22 //상속된 클래스 생성자
23 function __construct( $personSex, $personAge )
24 {
25 parent :: __construct( "heiyeluren" ); //부모 클래스의 생성자는 parent
26 $this->personSex = $personSex;
27 $ this->personAge = $personAge;
28 }
29
30 함수 printPerson()
31 {
32 print( $this->name. " is " .$this->personSex. ",올해 " .$this->personAge ); 🎜>
33 }
34 }
35
36 //Person 객체 인스턴스화
37 $personObject = new Person( "male", "21");
38
39 //인쇄 실행
40 $personObject->printPerson(); //출력: heiyeluren은 올해 21
41
42 ?> 🎜>저희는 이러한 세부 사항에 주의를 기울입니다. 멤버 속성은 모두 공개되며, 특히 상위 클래스의 속성은 상속된 클래스가 이를 통해 액세스할 수 있습니다.
25행의 핵심에 주목합니다: parent::__construct( "heiyeluren" ). 이때 parent를 사용하여 상위 클래스의 생성자를 호출하여 상위 클래스를 초기화합니다.
상위 클래스의 멤버는 모두 공개되므로 이를 사용하여 상속된 클래스를 직접 호출할 수 있습니다.
요약:

이것은 객체 인스턴스에 대한 포인터이고 self는 클래스 자체에 대한 참조이며 parent는 상위 클래스에 대한 참조입니다. .

재인쇄 출처: http://blog.csdn.net/skynet001/article/details/7518164

위 내용은 PHP의 this, self, parent 세 가지 키워드에 대한 구별과 비교를 관련 내용을 포함하여 소개하고 있으며, PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.