Saat menyimpan, Anda bisa mendapatkan id entitas yang ingin Anda simpan dengan $user->getId(), dalam hal ini akan mengembalikan ID pengguna karena kami mendapatkan pengguna dari database. Anda kemudian dapat menganggap itu adalah pengguna yang sudah ada yang harus diperbarui
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 Contoh
Mari kita mulai dengan contoh di
- Mendefinisikan kelas dengan variabel anggota pribadi, konstruktor, destruktor, pengambil/penyetel publik, dan metode publik;
- Mengalokasikan instance instance kelas;
- Mengakses variabel/fungsi instance
Contoh. Kelas MyCircle
Kita 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
Definisi 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 55MyCircleTest. 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 23Anda dapat menjalankan program melalui PHP CLI (Command-Line Interface)
$ php MyCircleTest.phpKeluaran yang diharapkan adalah
Contoh. Kelas MyTime
Kelas 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
Definisi 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 36Keluarannya adalah
Bagaimana OOP bekerja di OOP
Mendefinisikan 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,
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 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
- publik. Dapat diakses oleh semua. Ini defaultnya
- pribadi. Hanya dapat diakses di dalam kelas
- terlindung. Dapat diakses oleh subclass
Getter 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 OOP
statis
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 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
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 - konstanta
Variabel 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 Konstanta
Metode ajaib adalah metode khusus, dimulai dengan garis bawah ganda, yang dapat didefinisikan di kelas mana pun dan dijalankan melalui fungsionalitas PHP bawaan. Sebagai contoh,
- $ php MyCircleTest.php2. konstruktor
- $ php MyCircleTest.php5. destruktor
- 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. mengembalikan representasi string dari objek ini. Dipanggil secara implisit jika string diharapkan
- public function __construct( arguments ) { body; }_3. untuk kloning salinan
- public function __construct( arguments ) { body; }4 dan public function __construct( arguments ) { body; }5. untuk serialisasi
- public function __construct( arguments ) { body; }6, public function __construct( arguments ) { body; }7, public function __construct( arguments ) { body; }8 dan public function __construct( arguments ) { body; }9. Dipanggil saat mencoba mengakses variabel anggota yang tidak tersedia. public function __construct( arguments ) { body; }_6 dipicu oleh $ php MyCircleTest.php6;
- 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 424 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 36 37 38 39 40 41 425. Dipanggil saat mencoba memanggil fungsi (atau fungsi statis) yang tidak tersedia
- 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 426. melalui 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_7
- 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 428
[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,
- 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. nama kelas saat ini dalam string
- 1 2 3 4 5 6 7 8 9 10 11_2. nama file saat ini
- 1 2 3 4 5 6 7 8 9 10 11_3. nomor baris, digunakan bersama dengan 1 2 3 4 5 6 7 8 9 10 112
- 1 2 3 4 5 6 7 8 9 10 11_5. direktori absolut, sama seperti 1 2 3 4 5 6 7 8 9 10 116
- 1 2 3 4 5 6 7 8 9 10 117 dan 1 2 3 4 5 6 7 8 9 10 118. nama fungsi atau metode
- 1 2 3 4 5 6 7 8 9 10 11_9. namespace saat ini dalam string
[TODO] Contoh
diri sendiri. , orang tua. dan statis
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, 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 Fungsi
Dalam 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,
Warisan
Contoh. Kelas MyCircle dan MyCylinder
Mari 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
Sama 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 230MyCylinderTest. 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_1Keluaran 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_2Cara kerja Warisan
memanjangAnda 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
Polimorfisme
metode abstrak dan kelas abstrak
Metode 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_3Antarmuka
Antarmuka 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_4Perhatikan bahwa implementasi kelas abstrak dan antarmuka PHP persis sama dengan Java
sifat
Melihat
Lebih OOP
Objek Kloning
PHP 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 nama
Bisakah 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
- menyelesaikan konflik penamaan;
- berikan alias untuk nama panjang
Kata kunci ini digunakan dalam manajemen namespace
- 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23_42
- 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23_43
Untuk 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
- Gunakan nama yang sepenuhnya memenuhi syarat. 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_47. Perhatikan bahwa ini dimulai dengan garis miring ke belakang
- Gunakan nama yang tidak memenuhi syarat. 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_48. Ini akan diselesaikan ke 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23_49
- Gunakan nama yang memenuhi syarat sebagian. 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_50 (tanpa garis miring ke belakang). Ini akan diselesaikan ke 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 2351. Nama yang memenuhi syarat sebagian berantakan, dan harus dihindari
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