PHP5는 객체지향 언어의 기능을 대부분 갖고 있는 언어입니다. PHP4에 비해 객체지향적인 기능이 더 많지만, 일부 개념이 다소 혼란스러워서 오늘은 설명을 잘 못하겠습니다. 전문가 여러분, 양해 부탁드립니다
. to this, self, father, 하하, 더 재미있네요. 먼저 몇 가지 개념을 정립해 보겠습니다. 이 세 가지 키워드는 어디에 사용됩니까? 이것이 현재 객체에 대한 포인터임을 간단히 설명하겠습니다(C에서 포인터를 사용하여 살펴보겠습니다). it) self는 현재 객체에 대한 포인터이고 parent는 상위 클래스에 대한 포인터입니다. 여기서는 더 나은 표현이 없기 때문에 포인터를 자주 사용합니다. 하하, 저는 중국어를 잘 배우지 못했습니다. -_-#
이 방법으로 잘 이해가 되지 않는다면, 실제 사례를 바탕으로 이야기해 보겠습니다.
(1) 이
1 <?php
2
3 클래스 사용자 이름
4 {
5 //속성 정의
6 개인 $name;
7
8 //생성자 정의
9 함수 __construct( $name )
10 {
11 $this->name = $name; //여기서 이 포인터가 사용되었습니다.
12}
13
14 //소멸자
15 함수 __destruct(){}
16
17 //사용자 이름 멤버 함수 인쇄
18 함수 printName()
19 {
20 print($this->name); //이 포인터가 다시 사용됩니다.
스물 하나 }
스물 둘 }
스물셋
24 //객체 인스턴스화
25 $nameObject = new UserName( "heiyeluren" );
26
27 //인쇄 실행
28 $nameObject->printName() //출력: heiyeluren
29
30 //객체의 두 번째 인스턴스화
31 $nameObject2 = 새 사용자 이름( "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 <?php
2
3등급 카운터
4 {
5 //정적 변수를 포함한 속성 정의
6 개인 정적 $firstCount = 0;
7 개인 $lastCount;
8
9 //생성자
10 함수 __construct()
11 {
12 $this->lastCount = ++selft::$firstCount; //self를 사용하여 정적 변수를 호출할 때::(필드 연산 기호)를 사용해야 합니다.
13}
14
15 //최신값을 출력한다
16 함수 printLastCount()
17 {
18 인쇄( $this->lastCount );
19}
20}
스물하나
22 //객체 인스턴스화
23 $countObject = 새로운 카운터();
스물넷
25 $countObject->printLastCount() //출력 1
26
27 ?>
여기서 주의할 점은 6행과 12행 두 곳뿐입니다. 두 번째 줄에 정적 변수 $firstCount를 정의했고 초기 값은 0입니다. 그런 다음 12번 줄에서 이 값을 호출했습니다. self를 사용하여 호출하고 중간에 "::"을 사용하여 연결했습니다. 도메인 연산자를 호출하면 이때 호출하는 것은 클래스 자체에서 정의한 정적 변수 $frestCount입니다. 우리의 정적 변수는 다음 개체의 인스턴스와 아무 관련이 없으며 클래스에만 관련되어 있습니다. self는 클래스 자체를 가리키고 어떤 객체 인스턴스와도 아무 관련이 없기 때문에 이것을 참조에 사용할 수 없습니다. self를 사용하여 참조할 수 있습니다. 즉, 클래스에 정적 멤버가 있는 경우 self를 사용하여 해당 멤버를 호출해야 합니다.
(3) 부모
부모는 부모 클래스에 대한 포인터라는 것을 알고 있습니다. 일반적으로 부모 클래스의 생성자를 호출하는 데 사용됩니다.
1 <?php
2
3 //기본 클래스
4개 클래스 동물
5 {
6 //기본 클래스의 속성
7 공개 $이름;
8
9 //기본 클래스 생성자
10 공개 함수 __construct( $name )
11 {
12 $this->name = $name;
13}
14}
15
16 // 파생 클래스
17 클래스 Person은 Animal을 확장합니다. //Person 클래스는 Animal 클래스를 상속받습니다.
18 {
19 공개 $personSex;
20 공개 $personAge;
스물하나
22 //상속 클래스의 생성자
23 함수 __construct( $personSex, $personAge )
스물넷 {
25 parent::__construct( "heiyeluren" ); //부모를 사용하여 부모 클래스의 생성자를 호출합니다.
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( "남성", "21");
38
39 //인쇄 실행
40 $personObject->printPerson(); //출력: heiyeluren은 올해 21세 남성입니다.
41
42?>
우리는 다음 세부 사항에 주의를 기울입니다. 멤버 속성은 모두 공개되며, 특히 상속된 클래스가 이를 통해 액세스할 수 있도록 상위 클래스의 속성입니다. 핵심 사항인 25번째 줄에 주목합니다. parent::__construct( "heiyeluren" ) 이때 부모 클래스의 멤버는 다음과 같기 때문에 부모 클래스의 생성자를 호출하여 부모 클래스를 초기화합니다. 따라서 이를 직접 사용하여 상속된 클래스를 호출할 수 있습니다.
요약:
이것은 객체 인스턴스에 대한 포인터이고, self는 클래스 자체에 대한 참조이며, parent는 부모 클래스에 대한 참조입니다.
기본적으로 제가 아는 내용은 이 정도입니다. 오해가 있는 부분이 있을 수 있으니 지적해주세요!
내 이메일: [email protected]
쓰기 시간: 2004-11-3 18:30
http://dev.csdn.net/author/heiyeshuwu/702e33d6abaf4be58c06f1b55cf0fc8c.html