PHP5 เป็นภาษาที่มีฟีเจอร์ส่วนใหญ่ของภาษาเชิงวัตถุ มีฟีเจอร์เชิงวัตถุมากกว่า PHP4 มากมาย แต่แนวคิดบางอย่างอาจดูสับสนเล็กน้อย ดังนั้นฉันจะพูดถึงมันในวันนี้ฉันอธิบายไม่เก่ง โปรดยกโทษให้ฉันด้วย
ผู้เชี่ยวชาญ ตัวเองครับพ่อ 555 น่าสนุกกว่า เรามาสร้างแนวคิดกันก่อนว่า 3 คำนี้ใช้อยู่ที่ไหน เรามาอธิบายสั้นๆ ว่านี่คือพอยน์เตอร์ไปยังอ็อบเจ็กต์ปัจจุบัน (ลองใช้พอยน์เตอร์ในภาษาซีดู) มัน) และ self เป็นตัวชี้ไปยังวัตถุปัจจุบัน ตัวชี้ไปยังคลาส parent คือตัวชี้ไปยังคลาสพาเรนต์ เราใช้พอยน์เตอร์อธิบายตรงนี้บ่อยๆ เพราะไม่มีภาษาไหนจะดีไปกว่านี้แล้ว 555 ฉันเรียนภาษาจีนไม่เก่ง -_-#
หากคุณไม่เข้าใจวิธีนี้ดีพอ เรามาพูดถึงมันตามตัวอย่างจริงกันดีกว่า
(1)
1 นี้ <?php
2
ชื่อผู้ใช้คลาส 3
4 {
5 //กำหนดคุณลักษณะ
6 ชื่อ $ ส่วนตัว;
7
8 //กำหนดคอนสตรัคเตอร์
9 ฟังก์ชั่น __ สร้าง ( $ ชื่อ )
10 {
11 $this->name = $name; //ตัวชี้นี้ถูกใช้ที่นี่
12}
13
14 //ผู้ทำลาย
15 ฟังก์ชัน __ทำลาย(){}
16
17 // พิมพ์ฟังก์ชันสมาชิกชื่อผู้ใช้
18 ฟังก์ชั่น printName()
19 {
20 print($this->name); //ตัวชี้นี้ถูกใช้อีกครั้ง
ยี่สิบเอ็ด }
ยี่สิบสอง }
ยี่สิบสาม
24 // สร้างอินสแตนซ์ของวัตถุ
25 $nameObject = ชื่อผู้ใช้ใหม่( "heiyeluren" );
26
27 //ดำเนินการพิมพ์
28 $nameObject->printName(); //ผลลัพธ์: heiyeluren
29
30 // การสร้างอินสแตนซ์ที่สองของวัตถุ
31 $nameObject2 = ชื่อผู้ใช้ใหม่( "PHP5" );
32
33 //ดำเนินการพิมพ์
34 $nameObject2->printName(); //เอาท์พุต: PHP5
35 ?>
เรามาดูกันว่าคลาสข้างต้นใช้ตัวชี้นี้ในบรรทัดที่ 11 และ 20 ตามลำดับ แล้วเวลานี้ชี้ไปที่ใคร? ในความเป็นจริง สิ่งนี้จะกำหนดว่าใครชี้ไปที่เมื่อสร้างอินสแตนซ์ ตัวอย่างเช่น เมื่ออ็อบเจ็กต์ถูกสร้างอินสแตนซ์เป็นครั้งแรก (บรรทัดที่ 25) จากนั้นจะชี้ไปที่อ็อบเจ็กต์ $nameObject จากนั้นเมื่อพิมพ์บนบรรทัดที่ 18 ให้พิมพ์ ($this -><name) กลายเป็น print($nameObject->name) จากนั้นแน่นอนว่า "heiyeluren" จะถูกส่งออก ในกรณีที่สอง print( $this->name ) จะกลายเป็น print( $nameObject2->name ) ดังนั้น "PHP5" จึงเป็นเอาต์พุต ดังนั้น นี่คือตัวชี้ไปยังอินสแตนซ์ของวัตถุปัจจุบัน และไม่ได้ชี้ไปที่วัตถุหรือคลาสอื่นใด
(2)ตนเอง
ก่อนอื่น เราต้องทำให้ชัดเจนว่า self ชี้ไปที่คลาสนั้นเอง กล่าวคือ self ไม่ได้ชี้ไปที่อ็อบเจ็กต์ที่สร้างอินสแตนซ์ใดๆ โดยทั่วไป self จะถูกใช้เพื่อชี้ไปที่ตัวแปรคงที่ในคลาส
1 <?php.1
2
เคาน์เตอร์ 3 ชั้น
4 {
5 //กำหนดคุณสมบัติ รวมถึงตัวแปรคงที่
6 $firstCount ส่วนตัวคงที่ = 0;
7 $lastCount ส่วนตัว;
8
9 // ตัวสร้าง
10 ฟังก์ชัน __สร้าง()
11 {
12 $this->lastCount = ++selft::$firstCount; //ใช้ self เพื่อเรียกตัวแปรคงที่ เมื่อเรียก 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) parent
เรารู้ว่า parent เป็นตัวชี้ไปยังคลาส parent โดยทั่วไปเราใช้ parent เพื่อเรียก Constructor ของคลาส parent
1 <?php.1
2
3 //คลาสพื้นฐาน
สัตว์ 4 คลาส
5 {
6 //คุณสมบัติของคลาสพื้นฐาน
7 ชื่อสาธารณะ $; //name
8
9 // ตัวสร้างคลาสพื้นฐาน
10 ฟังก์ชั่นสาธารณะ __construct( $name )
11 {
12 $นี่->ชื่อ = $ชื่อ;
13}
14}
15
16 // คลาสที่ได้รับมา
คลาส 17 Person ขยาย Animal // คลาส Person สืบทอดคลาส Animal
18 {
19 สาธารณะ $personSex; //Gender
20 $personAge สาธารณะ //Age
ยี่สิบเอ็ด
22 // ตัวสร้างคลาสที่สืบทอดมา
23 ฟังก์ชั่น __construct( $personSex, $personAge )
ยี่สิบสี่ {
25 parent::__construct( "heiyeluren" ); //ใช้ parent เพื่อเรียก Constructor ของคลาส parent
26 $this->personSex = $personSex;
27 $this->personAge = $personAge;
28 }
29
30 ฟังก์ชั่น printPerson()
31 {
32 พิมพ์( $this->name. " is " .$this->personSex. ",this year " .$this->personAge );
33}
34}
35
36 //วัตถุบุคคลตัวอย่าง
37 $personObject = คนใหม่( "ชาย", "21");
38
39 //ดำเนินการพิมพ์
40 $personObject->printPerson(); //ผลลัพธ์: heiyeluren เป็นเพศชาย ปีนี้วันที่ 21
41
42?>
เราใส่ใจกับรายละเอียดต่อไปนี้: คุณลักษณะของสมาชิกเป็นแบบสาธารณะทั้งหมด โดยเฉพาะของคลาสพาเรนต์ เพื่อให้คลาสที่สืบทอดมาเข้าถึงได้ผ่านสิ่งนี้ เราให้ความสนใจกับประเด็นสำคัญ บรรทัดที่ 25: parent::__construct( "heiyeluren" ) ในขณะนี้ เราใช้ parent เพื่อเรียก Constructor ของคลาส parent เพื่อเริ่มต้นคลาส parent เนื่องจากสมาชิกของคลาส parent นั้น สาธารณะทั้งหมด ดังนั้นเราจึงสามารถใช้สิ่งนี้เพื่อเรียกในคลาสที่สืบทอดมาได้โดยตรง
สรุป:
นี่คือตัวชี้ไปยังอินสแตนซ์ของวัตถุ self คือการอ้างอิงถึงคลาสนั้นเอง และ parent คือการอ้างอิงถึงคลาสพาเรนต์
โดยพื้นฐานแล้วนั่นคือทั้งหมดที่ฉันรู้ ต้องมีความเข้าใจผิดบางอย่าง โปรดชี้ให้เห็น!
อีเมลของฉัน: [email protected]
WriteTime: 2004-11-3 18:30
http://dev.csdn.net/author/heiyeshuwu/702e33d6abaf4be58c06f1b55cf0fc8c.html