PHP5 adalah bahasa yang memiliki sebagian besar fitur bahasa berorientasi objek. Ia memiliki lebih banyak fitur berorientasi objek daripada PHP4, tetapi beberapa konsep agak membingungkan, jadi saya tidak pandai menjelaskannya hari ini itu. Mohon maafkan saya para ahli. . (Untuk membaca artikel ini, Anda perlu memahami pengetahuan berorientasi objek PHP5)
Pertama, mari kita pahami tiga kata kunci di atas: this, self, parent, yang lebih mudah dipahami secara harfiah, merujuk. untuk ini bapak sendiri, haha, lebih asyik, mari kita buat dulu beberapa konsep. Di mana ketiga kata kunci ini digunakan? Mari kita jelaskan secara singkat bahwa ini adalah penunjuk ke objek saat ini (mari kita gunakan penunjuk di C untuk melihatnya itu), dan self adalah penunjuk ke objek saat ini. Penunjuk ke kelas, induk adalah penunjuk ke kelas induk. Kami sering menggunakan petunjuk untuk menjelaskan di sini karena tidak ada bahasa yang lebih baik untuk mengungkapkannya. Haha, saya tidak belajar bahasa Mandarin dengan baik. -_-#
Jika Anda belum memahaminya dengan baik, mari kita bahas berdasarkan contoh nyata.
(1) ini
1 <?php
2
Nama Pengguna kelas 3
4 {
5 //Tentukan atribut
6 pribadi $nama;
7
8 //Definisikan konstruktor
9 fungsi __konstruksi( $nama )
10 {
11 $this->name = $name; //Penunjuk ini telah digunakan di sini
12}
13
14 //Penghancur
15 fungsi __destruct(){}
16
17 //Cetak fungsi anggota nama pengguna
18 fungsi namacetak()
19 {
20 print($ini->nama); //Penunjuk ini digunakan lagi
dua puluh satu }
dua puluh dua }
dua puluh tiga
24 // membuat instance objek
25 $namaObjek = Nama Pengguna baru( "heiyeluren" );
26
27 //Melaksanakan pencetakan
28 $namaObjek->printName(); //Keluaran: heiyeluren
29
30 //Instansiasi objek yang kedua
31 $namaObjek2 = NamaPengguna baru( "PHP5" );
32
33 //Jalankan pencetakan
34 $namaObjek2->printName(); //Keluaran: PHP5
35 ?>
Mari kita lihat bahwa kelas di atas menggunakan pointer ini masing-masing pada baris 11 dan 20, jadi siapa yang menunjuk pada saat itu? Faktanya, ini menentukan siapa yang ditunjuk ketika membuat instance itu. Misalnya, ketika objek dibuat untuk pertama kalinya (baris 25), maka this menunjuk ke objek $nameObject. Kemudian ketika mencetak pada baris 18, print( $this -><name) menjadi print($nameObject->name), maka tentu saja "heiyeluren" adalah outputnya. Dalam contoh kedua, print( $this->name ) menjadi print( $nameObject2->name ), jadi "PHP5" adalah output. Oleh karena itu, ini adalah penunjuk ke instance objek saat ini dan tidak menunjuk ke objek atau kelas lain.
(2)self
Pertama-tama, kita harus memperjelas bahwa self menunjuk ke kelas itu sendiri, yaitu self tidak menunjuk ke objek apa pun yang dipakai. Umumnya, self digunakan untuk menunjuk ke variabel statis di kelas.
1 <?php
2
Konter kelas 3
4 {
5 //Mendefinisikan properti, termasuk variabel statis
6 statis pribadi $firstCount = 0;
7 pribadi $lastCount;
8
9 //Konstruktor
10 fungsi __konstruksi()
11 {
12 $this->lastCount = ++selft::$firstCount; //Gunakan self untuk memanggil variabel statis Saat memanggil self, Anda harus menggunakan:: (simbol operasi bidang)
13}
14
15 //Cetak nilai terbaru
16 fungsi printLastCount()
17 {
18 cetak( $ini->jumlah terakhir );
19}
20}
dua puluh satu
22 // membuat instance objek
23 $countObject = Penghitung baru();
dua puluh empat
25 $countObject->printLastCount(); //Keluaran 1
26
27 ?>
Kita hanya perlu memperhatikan dua tempat disini, jalur 6 dan jalur 12. Kami mendefinisikan variabel statis $firstCount pada baris kedua, dan nilai awalnya adalah 0. Kemudian kami memanggil nilai ini pada baris 12, menggunakan self untuk memanggilnya, dan menggunakan "::" untuk menghubungkan di tengah, itulah yang kami panggil operator domain, maka yang kita panggil saat ini adalah variabel statis $frestCount yang didefinisikan oleh kelas itu sendiri. Variabel statis kita tidak ada hubungannya dengan instance objek berikut, itu hanya terkait dengan kelas, lalu jika saya panggil kelas itu sendiri, maka kita tidak bisa menggunakan ini untuk referensi, Anda dapat menggunakan self untuk referensi, karena self menunjuk ke kelas itu sendiri dan tidak ada hubungannya dengan instance objek apa pun. Dengan kata lain, jika ada anggota statis di kelas kita, kita juga harus menggunakan self untuk memanggil mereka.
(3) parent
Kita tahu bahwa parent adalah pointer ke kelas induk. Umumnya, kita menggunakan parent untuk memanggil konstruktor kelas induk.
1 <?php
2
3 //kelas dasar
4 kelas Hewan
5 {
6 //Atribut kelas dasar
7 publik $nama; //nama
8
9 //Konstruktor kelas dasar
10 fungsi publik __construct( $name )
11 {
12 $ini->nama = $nama;
13}
14}
15
16 // Kelas turunan
17 kelas Orang memperluas Hewan //Kelas Orang mewarisi kelas Hewan
18 {
19 publik $personSex; //Jenis Kelamin
20 publik $personAge; //Umur
dua puluh satu
22 //Konstruktor kelas yang diwarisi
23 fungsi __konstruksi( $personSex, $personAge )
dua puluh empat {
25 parent::__construct( "heiyeluren" ); //Gunakan parent untuk memanggil konstruktor kelas induk
26 $ini->orangSex = $orangSex;
27 $ini->usiaorang = $usiaorang;
28 }
29
30 fungsi printPerson()
31 {
32 print( $this->name. " adalah " .$this->personSex. ",tahun ini " .$this->personAge );
33}
34}
35
36 //Membuat instance objek Person
37 $personObject = Orang baru( "laki-laki", "21");
38
39 //Jalankan pencetakan
40 $personObject->printPerson(); //Output: heiyeluren adalah laki-laki, tahun ini 21
41
42?>
Kami memperhatikan detail berikut: semua atribut anggota bersifat publik, terutama milik kelas induk, untuk diakses oleh kelas yang diwarisi melalui ini. Kita memperhatikan poin kuncinya, baris 25: parent::__construct( "heiyeluren" ). Saat ini, kita menggunakan parent untuk memanggil konstruktor kelas induk untuk menginisialisasi kelas induk, karena anggota dari kelas induk adalah semuanya bersifat publik. Jadi kita bisa langsung menggunakan ini untuk memanggil kelas yang diwarisi.
Ringkasan:
ini adalah pointer ke instance objek, self adalah referensi ke kelas itu sendiri, dan parent adalah referensi ke kelas induk.
Pada dasarnya, hanya itu yang saya tahu. Pasti ada kesalahpahaman. Tolong tunjukkan!
Email saya: [email protected]
Waktu Penulisan: 3-11-2004 18:30
http://dev.csdn.net/author/heiyeshuwu/702e33d6abaf4be58c06f1b55cf0fc8c.html