Bagaimana bisa menggunakan variabel pribadi di kelas lain di php?

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

Lingkaran Saya. php

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. php

Pengemudi 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 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

Waktuku. php

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. php

Pengemudi 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 OOP

Mendefinisikan Kelas

Kelas 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 baru

Untuk 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,

$ini

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 dilindungi

Kita 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 dan Setter

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-akhirnya

Pernyataan 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

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 42MyCircleWithCountTest. 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 - 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. $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 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

Lingkaran Saya. php

Sama seperti contoh sebelumnya

MyCylinder. php

Kelas 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. php

Pengemudi 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 Warisan

memanjang

Anda 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 tua

Dalam 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 Metode

Subclass 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

terakhir

Variabel/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_3

Antarmuka

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_4

Perhatikan 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
Mendefinisikan Namespace

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 Dunia

Entitas apa pun yang didefinisikan tanpa ruang nama adalah milik ruang global

Sub-ruang nama

PHP 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 Namespace

Untuk mereferensikan entitas di namespace, Anda bisa

  1. 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
  2. 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
  3. 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 Global

Nama 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 .

Postingan terbaru

LIHAT SEMUA