Saat menyimpan, Anda bisa mendapatkan id entitas yang ingin Anda simpan dengan Show Saya akan berasumsi bahwa Anda sudah familiar dengan konsep dan terminologi Pemrograman Berorientasi Objek (OOP). Jika tidak, baca "Java OOP" atau "C++ OOP" Memulai dengan ContohMari kita mulai dengan contoh di
Contoh. Kelas MyCircleKita akan mulai dengan kelas yang disebut 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23_5, yang memodelkan lingkaran dengan jari-jari tertentu, seperti yang ditunjukkan pada diagram kelas berikut Lingkaran Saya. phpDefinisi kelas 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 235 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 MyCircleTest. phpPengemudi penguji untuk kelas 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 235 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 Anda dapat menjalankan program melalui PHP CLI (Command-Line Interface) $ php MyCircleTest.php Keluaran yang diharapkan adalah Contoh. Kelas MyTimeKelas 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 238 memodelkan instance waktu jam, menit dan detik, seperti yang ditunjukkan pada diagram kelas berikut Waktuku. phpDefinisi kelas untuk kelas 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 238 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117_ MyTimeTest. phpPengemudi penguji untuk kelas 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 238 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 Keluarannya adalah Bagaimana OOP bekerja di OOPMendefinisikan KelasKelas terdiri dari variabel anggota dan fungsi. Untuk mendefinisikan kelas, gunakan kata kunci $ php MyCircleTest.php_1, sebagai berikut class { memberVariables; memberFunctions; } Konstruktor __construct()Konstruktor adalah fungsi khusus yang disebut $ php MyCircleTest.php2. Konstruktor digunakan untuk membuat instance dan menginisialisasi variabel instance. Untuk membuat instance kelas, Anda perlu memanggil konstruktor melalui operator $ php MyCircleTest.php3 (seperti yang diilustrasikan dalam test driver). Konstruktor tidak mengembalikan apa pun, oleh karena itu, tidak boleh ada pernyataan $ php MyCircleTest.php4 di dalam konstruktor public function __construct( arguments ) { body; } PHP TIDAK mendukung kelebihan fungsi (tidak seperti C++ dan Java). Dengan kata lain, hanya ada satu versi konstruktor. Namun, di PHP, Anda bisa memberikan nilai default ke parameter fungsi, termasuk konstruktor. Dengan cara ini, konstruktor dapat dipanggil dengan kumpulan argumen yang berbeda. Misalnya, PHP tidak menyediakan konstruktor no-arg (no-argument) default (tidak seperti Java). Anda perlu mendefinisikan konstruktor secara eksplisit, jika diperlukan Penghancur __destruct()Demikian pula, Anda dapat mendefinisikan destruktor yang disebut $ php MyCircleTest.php5 untuk kelas. Destruktor tidak boleh membawa parameter apa pun. Ini akan dijalankan sebelum instance dirusak (atau dibatalkan alokasinya). Destruktor tidak umum digunakan Dari output contoh di atas, dapat dilihat bahwa destructor dipanggil pada semua objek ketika end-of-file tercapai, sebelum program keluar. Untuk memicu destruktor secara eksplisit, Anda dapat memanggil $ php MyCircleTest.php6 pada objek. Misalnya, Mengalokasikan Mesin Virtual - Operator baruUntuk mengalokasikan instance kelas, gunakan operator $ php MyCircleTest.php3 untuk memanggil konstruktor, dalam bentuk $ php MyCircleTest.php8 Mengakses Anggota - Anggota-Operator (->)Untuk mengakses variabel/fungsi anggota, gunakan operator anggota ( $ php MyCircleTest.php9), dalam bentuk 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 1170. Misalnya, $ini1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117_1 mengacu pada contoh saat ini. Untuk mereferensikan variabel/fungsi anggota DALAM definisi kelas, Anda HARUS memulai dengan 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 1171, e. g. , 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 1173, 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 1174. Perhatikan bahwa Anda tidak dapat menghilangkan 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 1171 (tidak seperti Java) Pengubah Kontrol Akses - publik, pribadi, dan dilindungiKita dapat menggunakan pengubah kontrol akses untuk membatasi akses ke variabel/fungsi anggota. PHP mendukung pengubah kontrol akses ini untuk variabel dan fungsi anggota
Getter dan SetterGetter adalah setter yang digunakan untuk mengakses dan mengubah variabel anggota pribadi, seperti yang ditunjukkan pada contoh di atas Ini adalah praktik umum PHP untuk menggunakan fungsi yang sama untuk getter cum setter, dibedakan oleh argumennya. Misalnya, __toString()1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 1176 adalah salah satu yang disebut metode ajaib, yang akan mengembalikan representasi string dari instance saat ini. Ini secara implisit dipanggil ketika objek diperlakukan sebagai string. Misalnya, Perhatikan bahwa jika 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 1176 tidak ditentukan, " 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 1178" akan menyebabkan kesalahan runtime 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117_6 mirip dengan 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 360 di Jawa. Namun, tidak seperti kelas Java yang selalu mewarisi 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 360 dari root superclass 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 362, 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 1176 di PHP harus didefinisikan secara eksplisit untuk setiap kelas __KELAS__1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36_4 adalah salah satu yang disebut konstanta ajaib di PHP, yang menjaga nama kelas dalam string Komentar DocBlock (atau PhpDoc).Komentar yang dilampirkan dengan 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 365 dikenal sebagai "DocBlock" atau "PhpDoc", yang dapat diekstraksi untuk menghasilkan dokumentasi (seperti JavaDoc). Anda dapat menggunakan markup seperti 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36_6 dan $ php MyCircleTest.php4 untuk menargetkan deskripsi Penanganan Pengecualian dan coba-tangkap-akhirnyaPernyataan dalam blok try dieksekusi secara berurutan. Jika salah satu pernyataan melempar pengecualian, pernyataan lainnya tidak akan dieksekusi. Alih-alih, eksekusi beralih ke blok tangkapan. Jika semua pernyataan di blok try tidak membuang pengecualian apa pun, maka blok try selesai, dan blok catch tidak dijalankan. Perhatikan bahwa eksekusi selalu dilanjutkan setelah blok try-catch, terlepas dari apakah ada pengecualian Konstruk try-catch mendukung penanganan kesalahan/pengecualian yang baik. Tanpa try-catch, program akan dihentikan secara tiba-tiba saat pengecualian ditemukan. Konstruksi try-catch juga memisahkan logika utama dan logika penanganan pengecualian, untuk rekayasa perangkat lunak yang lebih baik Lebih OOPstatisAnggota 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36_8 (variabel atau fungsi) milik kelas, bukan milik instance. Dengan kata lain, semua instance berbagi salinan yang sama dari anggota statis Misalnya, mari tulis ulang kelas MyCircle kita untuk menyertakan variabel 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 368 class { memberVariables; memberFunctions; }0 untuk mempertahankan jumlah lingkaran yang dibuat, seperti yang ditunjukkan pada diagram kelas berikut. Perhatikan bahwa anggota statis digarisbawahi dalam notasi UML MyCircleWithCount. php1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 MyCircleWithCountTest. php1 2 3 4 5 6 7 8 9 10 11 Keluaran yang diharapkan adalah Constructed a MyCircleWithCount. Number of circles is: 1. Constructed a MyCircleWithCount. Number of circles is: 2. Destructed a MyCircleWithCount. Number of circles is: 1. Constructed a MyCircleWithCount. Number of circles is: 2. Number of circles is: 2 Done. Destructed a MyCircleWithCount. Number of circles is: 1. Destructed a MyCircleWithCount. Number of circles is: 0. Dapatkah Anda menghitung tanpa 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 368? Konstanta - konstantaVariabel anggota konstan diidentifikasi dengan kata kunci class { memberVariables; memberFunctions; }2. Konstanta selalu class { memberVariables; memberFunctions; }3 dan 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 368, isinya tidak dapat dimodifikasi. Tidak seperti variabel normal, konstanta tidak dimulai dengan tanda $ di depan. Dalam definisi kelas, konstanta dapat dirujuk melalui class { memberVariables; memberFunctions; }5, sama seperti anggota 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 368 lainnya. Di luar definisi kelas, mereka direferensikan melalui class { memberVariables; memberFunctions; }7. Dengan konvensi, gunakan huruf besar untuk nama konstanta, mis. g. , class { memberVariables; memberFunctions; }_8, class { memberVariables; memberFunctions; }9 Metode Sihir dan KonstantaMetode ajaib adalah metode khusus, dimulai dengan garis bawah ganda, yang dapat didefinisikan di kelas mana pun dan dijalankan melalui fungsionalitas PHP bawaan. Sebagai contoh,
[TODO] Contoh Konstanta ajaib ( class { memberVariables; memberFunctions; }3 dan 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 368), dinamai dalam huruf besar dan diawali dan diakhiri dengan garis bawah ganda (tanpa awalan $), berisi properti hanya-baca khusus. Sebagai contoh,
[TODO] Contoh diri sendiri. , orang tua. dan statisConstructed a MyCircleWithCount. Number of circles is: 1. Constructed a MyCircleWithCount. Number of circles is: 2. Destructed a MyCircleWithCount. Number of circles is: 1. Constructed a MyCircleWithCount. Number of circles is: 2. Number of circles is: 2 Done. Destructed a MyCircleWithCount. Number of circles is: 1. Destructed a MyCircleWithCount. Number of circles is: 0.0, Constructed a MyCircleWithCount. Number of circles is: 1. Constructed a MyCircleWithCount. Number of circles is: 2. Destructed a MyCircleWithCount. Number of circles is: 1. Constructed a MyCircleWithCount. Number of circles is: 2. Number of circles is: 2 Done. Destructed a MyCircleWithCount. Number of circles is: 1. Destructed a MyCircleWithCount. Number of circles is: 0.1 dan Constructed a MyCircleWithCount. Number of circles is: 1. Constructed a MyCircleWithCount. Number of circles is: 2. Destructed a MyCircleWithCount. Number of circles is: 1. Constructed a MyCircleWithCount. Number of circles is: 2. Number of circles is: 2 Done. Destructed a MyCircleWithCount. Number of circles is: 1. Destructed a MyCircleWithCount. Number of circles is: 0.2 memungkinkan Anda mengakses 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 368 anggota dan class { memberVariables; memberFunctions; }2 ( class { memberVariables; memberFunctions; }3 dan 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 368) DALAM definisi kelas. Constructed a MyCircleWithCount. Number of circles is: 1. Constructed a MyCircleWithCount. Number of circles is: 2. Destructed a MyCircleWithCount. Number of circles is: 1. Constructed a MyCircleWithCount. Number of circles is: 2. Number of circles is: 2 Done. Destructed a MyCircleWithCount. Number of circles is: 1. Destructed a MyCircleWithCount. Number of circles is: 0.0 merujuk ke kelas saat ini, seperti yang diilustrasikan dalam contoh di atas. Constructed a MyCircleWithCount. Number of circles is: 1. Constructed a MyCircleWithCount. Number of circles is: 2. Destructed a MyCircleWithCount. Number of circles is: 1. Constructed a MyCircleWithCount. Number of circles is: 2. Number of circles is: 2 Done. Destructed a MyCircleWithCount. Number of circles is: 1. Destructed a MyCircleWithCount. Number of circles is: 0.1 merujuk ke superclass dan Constructed a MyCircleWithCount. Number of circles is: 1. Constructed a MyCircleWithCount. Number of circles is: 2. Destructed a MyCircleWithCount. Number of circles is: 1. Constructed a MyCircleWithCount. Number of circles is: 2. Number of circles is: 2 Done. Destructed a MyCircleWithCount. Number of circles is: 1. Destructed a MyCircleWithCount. Number of circles is: 0.2 merujuk ke kelas saat ini tetapi dengan pengikatan terlambat - yang akan dibahas nanti dalam pewarisan Ingatlah bahwa di luar definisi kelas, Anda dapat mengakses class { memberVariables; memberFunctions; }3 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 368 anggota dan class { memberVariables; memberFunctions; }2 melalui 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 2303 diri vs. $iniGunakan 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117_1 untuk merujuk ke objek saat ini. Gunakan 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23_05 untuk merujuk ke kelas saat ini. Dengan kata lain, dalam definisi kelas, gunakan 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 2306 untuk referensi non- 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 368 anggota, gunakan 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 2308 untuk 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 368 anggota Ketik Petunjuk untuk Parameter FungsiDalam definisi fungsi, Anda dapat mendeklarasikan JENIS parameter, seperti 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 2310, nama kelas atau antarmuka, atau 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 2311. Namun, petunjuk tipe TIDAK berlaku untuk tipe skalar, seperti int atau string. Misalnya, WarisanContoh. Kelas MyCircle dan MyCylinderMari kita ilustrasikan pewarisan superclass-subclass dengan contoh kelas 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 235 dan 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 2313 berikut Lingkaran Saya. phpSama seperti contoh sebelumnya MyCylinder. phpKelas 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 2313 mewarisi dari kelas 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 235, dengan lebih banyak variabel/fungsi anggota 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 230 MyCylinderTest. phpPengemudi penguji untuk kelas 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23_13 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23_1 Keluaran yang diharapkan adalah 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23_2 Cara kerja WarisanmemanjangAnda dapat menentukan subclass yang mewarisi superclass melalui kata kunci 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 2317 diri dan orang tuaDalam definisi subclass, Anda dapat menggunakan kata kunci 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 2318 dalam bentuk 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 2319 untuk merujuk ke anggota superclass; . 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 2322 dikenal sebagai operator resolusi ruang lingkup Mengganti MetodeSubclass dapat mengganti metode yang diwariskan dari superclass dengan memberikan definisinya sendiri. Misalnya, kelas 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23_13 dapat menggantikan metode 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 2324 yang diwarisi dari superclass 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 235 sebagai berikut terakhirVariabel/metode 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 2326 tidak dapat diganti dalam subkelas Polimorfismemetode abstrak dan kelas abstrakMetode 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 2327 adalah metode yang hanya memiliki tanda tangan, tanpa implementasi. Kelas yang berisi satu atau lebih 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23_27 metode adalah kelas 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 2327. Kelas 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23_27 tidak dapat dibuat instance-nya, karena definisinya tidak lengkap. Untuk menggunakan kelas 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23_27, turunkan subkelas dan ganti metode 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 2327. Subclass sekarang sudah lengkap dan dapat dibuat instance-nya Misalnya, 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23_3 AntarmukaAntarmuka adalah kelas 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23_27 murni, yang hanya berisi 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 2327 metode. Antarmuka didefinisikan menggunakan kata kunci 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23_35 (bukan $ php MyCircleTest.php1). Untuk menurunkan subkelas dari antarmuka, gunakan kata kunci 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 2337 (bukan 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 2317) Sebagai contoh, 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23_4 Perhatikan bahwa implementasi kelas abstrak dan antarmuka PHP persis sama dengan Java sifatMelihat Lebih OOPObjek KloningPHP menyediakan kata kunci 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23_39 untuk menyalin objek, yang melakukan salinan bayangan. Jika public function __construct( arguments ) { body; }_3 metode ajaib didefinisikan di kelas, itu akan dijalankan setelah salinan bayangan __beban otomatis()[MELAKUKAN] Ruang namaBisakah Anda memiliki dua versi kelas 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23_41 dalam program Anda? Namespace (disebut paket di Java) mengelompokkan kelas, antarmuka, fungsi, dan konstanta terkait. Ini mencoba untuk
Kata kunci ini digunakan dalam manajemen namespace
Mendefinisikan NamespaceUntuk mendefinisikan namespace, tulis " 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23_44" sebagai pernyataan PERTAMA dalam file PHP Anda, yang menetapkan namespace "saat ini". Misalnya, Anda dapat menentukan lebih dari satu ruang nama dalam satu file. Tapi jangan lakukan itu untuk praktik terbaik Ruang DuniaEntitas apa pun yang didefinisikan tanpa ruang nama adalah milik ruang global Sub-ruang namaPHP mendukung apa yang disebut sub-namespace, dengan nama dipisahkan oleh back-slash, mis. g. , " 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23_45". Perhatikan bahwa tidak ada garis miring ke belakang Merupakan praktik terbaik untuk menyimpan sumber Anda di direktori yang cocok dengan namespace. Misalnya, 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 2345 akan disimpan di Path/To/MyProject/ZBox/ModSec Sekali lagi, perhatikan bahwa PHP menggunakan back-slash di namespace Mereferensikan Entitas di NamespaceUntuk mereferensikan entitas di namespace, Anda bisa
Untuk mengakses entitas di namespace lain di luar namespace saat ini, gunakan nama yang sepenuhnya memenuhi syarat Untuk mengakses entitas di ruang global di luar namespace saat ini, awali entitas dengan garis miring terbalik di depan. Misalnya, 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 2352 [TODO] Contoh Konstanta Ajaib __NAMESPACE__Konstanta ajaib 1 2 3 4 5 6 7 8 9 10 119 berisi nama namespace saat ini (dalam string). Di ruang global, 1 2 3 4 5 6 7 8 9 10 11_9 berisi string kosong Mengimpor dengan "use. "Anda dapat meminta operator 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23_55 untuk mengimpor kelas, antarmuka, atau namespace. Setelah entitas diimpor, Anda dapat mengaksesnya menggunakan nama entitasnya, bukan nama yang sepenuhnya memenuhi syarat. (Ini mirip dengan pernyataan 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23_56 di Jawa; atau 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 2357 di C#. ) PHP5. 6 mendukung impor fungsi dan konstanta juga. Misalnya, Aliasing dengan "gunakan. sebagai. "Selanjutnya, Anda dapat menentukan alias dalam bentuk " 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 2358". Misalnya, Fungsi/Konstanta jatuh kembali ke Ruang GlobalNama kelas yang tidak memenuhi syarat diselesaikan ke namespace saat ini. Untuk menggunakan kelas di luar namespace saat ini, Anda harus menggunakan nama yang sepenuhnya memenuhi syarat Nama fungsi yang tidak memenuhi syarat dan konstanta juga diselesaikan ke namespace saat ini. Namun, jika tidak dapat diselesaikan, fungsi/konstanta akan kembali ke ruang global Bagaimana cara mengakses variabel pribadi di kelas lain di php?Anda perlu mengatur akses ke dilindungi. Pribadi berarti hanya dapat diakses dari dalam kelasnya sendiri dan tidak dapat diwariskan. Dilindungi memungkinkannya untuk diwariskan tetapi masih tidak dapat diakses langsung dari luar kelas. Simpan jawaban ini
Bagaimana Anda menggunakan variabel pribadi di kelas dari kelas lain?Kita dapat mengakses variabel pribadi di kelas yang berbeda dengan memasukkan variabel tersebut ke dalam metode Publik dan memanggil metode tersebut dari kelas lain dengan membuat objek dari kelas tersebut. Example: using System; using System.
Bisakah variabel pribadi diakses dari kelas lain?Tetapi, jika Anda mewarisi kelas yang memiliki bidang privat, termasuk semua anggota kelas lainnya, variabel privat juga diwariskan dan tersedia untuk subkelas. Namun, Anda tidak dapat mengaksesnya secara langsung , jika Anda melakukannya, kesalahan waktu kompilasi akan dihasilkan.
Bisakah kita memanggil metode pribadi dari luar kelas php?Properti dan metode pribadi hanya dapat digunakan oleh kelas di mana properti atau metode didefinisikan. Kelas turunan dan kode luar tidak dapat menggunakannya . |