Objek di PHP. Objek Membuat objek di php




Objek

Objek adalah salah satu konsep dasar pemrograman berorientasi objek.

Objek adalah variabel, yang instance-nya dibuat menggunakan templat khusus yang disebut kelas. Konsep objek dan kelas merupakan bagian integral dari paradigma pemrograman berorientasi objek (OOP).

Objek adalah kumpulan data (properti) dan fungsi (metode) untuk memprosesnya. Data dan metode disebut anggota kelas. Secara umum, objek adalah segala sesuatu yang mendukung enkapsulasi.

Struktur internal suatu objek mirip dengan hash, hanya saja operator -> digunakan untuk mengakses elemen dan fungsi individual, bukan tanda kurung siku.

Untuk menginisialisasi objek, gunakan ekspresi baru, yang membuat instance objek dalam variabel.

kelas foo
{
fungsi do_foo()
{
gema "Melakukan foo." ;
}
}

$bar = foo baru;
$bar -> do_foo();
?>

Dalam suatu objek, data dan kode (anggota kelas) bisa bersifat publik atau tidak. Data publik dan anggota kelas dapat diakses oleh bagian lain dari program yang bukan merupakan bagian dari objek. Namun data pribadi dan anggota kelas hanya tersedia di dalam objek ini.

Deskripsi kelas di PHP dimulai dengan kata fungsi kelas:

kelas Nama Kelas (
// deskripsi anggota kelas - data dan metode pemrosesannya
}

Untuk pengumuman obyek operator harus digunakan baru:

Objek = Nama Kelas baru;

Data dijelaskan menggunakan kata fungsi var. Metode ini dijelaskan dengan cara yang sama seperti fungsi biasa. Anda juga dapat meneruskan parameter ke metode tersebut.

Contoh kelas di PHP:

// Buat kelas Coor baru:
kelas Coor (
// data (properti):
var$nama;
var $tambahan;

// metode:
Nama fungsi() (
gema "

Yohanes

" ;
}

}

// Membuat Sebuah Objek Kelas rekan:
$objek = Coor baru;
?>

Mengakses kelas dan objek di PHP

Kami melihat bagaimana kelas dideskripsikan dan objek dibuat. Sekarang kita perlu mengakses anggota kelas, untuk tujuan ini di PHP ada operator -> . Berikut ini contohnya:

// Buat kelas Coor baru:
kelas Coor (
// data (properti):
var$nama;

// metode:
fungsi NamaDapatkan() (
gema "

Yohanes

" ;
}

}


$objek = Coor baru;
// Dapatkan akses ke anggota kelas:
$objek -> nama = "Alex" ;
echo $objek -> nama;
// Mencetak "Alex"
// Sekarang mari kita akses metode kelas (sebenarnya, sebuah fungsi di dalam kelas):
$objek -> NamaDapatkan();
// Mencetak "John" dengan huruf kapital
?>

Untuk mengakses anggota kelas dalam suatu kelas, Anda harus menggunakan pointer $ini, yang selalu mengacu pada objek saat ini. Metode yang dimodifikasi Dapatkan Nama():

fungsi NamaDapatkan() (
echo $ini->nama;
}

Dengan cara yang sama, Anda dapat menulis sebuah metode Nama yang ditetapkan():

fungsi Nama Set($nama) (
$ini->nama = $nama;
}

Sekarang Anda dapat menggunakan metode untuk mengubah nama Nama yang ditetapkan():

$objek->NamaSet("Peter");
$objek->Getname();

Dan berikut daftar kode lengkapnya:

// Buat kelas Coor baru:
kelas Coor (
// data (properti):
var$nama;

// metode:
fungsi NamaDapatkan() (
echo $ini -> nama;
}

fungsi Nama Set($nama) (
$ini -> nama = $nama ;
}

}

// Buat objek kelas Coor:
$objek = Coor baru;
// Sekarang untuk mengganti nama kita menggunakan metode Setname():
$objek -> Nama Set("Nama Panggilan");
// Dan untuk akses, seperti sebelumnya, Getname():
$objek -> NamaDapatkan();
// Skrip mencetak "Nick"
?>

penunjuk $ini juga dapat digunakan untuk mengakses metode, bukan hanya akses data:

fungsi Nama Set($nama) (
$ini->nama = $nama;
$ini->NamaDapatkan();
}

Inisialisasi objek

Terkadang ada kebutuhan untuk menginisialisasi suatu objek - untuk menetapkan propertinya ke nilai awal. Katakanlah nama kelasnya adalah Coor dan berisi dua properti: nama orang dan kota tempat tinggalnya. Anda dapat menulis metode (fungsi) yang akan menginisialisasi suatu objek, misalnya Init():

// Buat kelas Coor baru:
kelas Coor (
// data (properti):
var$nama;
var $kota;

// Metode inisialisasi:
fungsi Init($nama) (
$ini -> nama = $nama ;
$ini -> kota = "London" ;
}

}

// Buat objek kelas Coor:
$objek = Coor baru;
// Untuk menginisialisasi objek, segera panggil metode:
$objek -> Init();
?>

Hal utama adalah jangan lupa memanggil fungsi segera setelah membuat objek, atau memanggil beberapa metode di antara pembuatan (operator baru) objek dan inisialisasinya (memanggil Init).

Agar PHP mengetahui bahwa suatu metode tertentu perlu dipanggil secara otomatis ketika suatu objek dibuat, maka perlu diberi nama yang sama dengan kelasnya ( Koor):

fungsi Koord ($nama)
$ini->nama = $nama;
$ini->kota = "London";
}

Metode yang menginisialisasi suatu objek disebut konstruktor. Namun, PHP tidak memiliki destruktor karena sumber daya dilepaskan secara otomatis ketika skrip keluar.

Konversikan ke Objek

Jika suatu objek diubah menjadi objek, objek tersebut tidak diubah. Jika nilai tipe lain apa pun dikonversi menjadi objek, instance baru dari kelas bawaan stdClass akan dibuat. Jika nilainya kosong, instance baru juga akan kosong. Untuk nilai lainnya, nilai tersebut akan dimasukkan ke dalam variabel anggota skalar:

Forum portal PHP. S.U.

Objek mirip dengan fungsi, namun jauh lebih kompleks. Suatu objek dapat disebut kumpulan beberapa fungsi dan variabel yang disatukan oleh satu nama.

Cara termudah untuk memahami suatu objek adalah dengan sebuah contoh, tetapi di sini Anda harus memiliki sedikit kesabaran dan menguasai teorinya terlebih dahulu.

Faktanya adalah objek dibuat berdasarkan kelas, dan kelas dapat ditulis oleh programmer itu sendiri, atau dia dapat bekerja dengan kelas yang ditulis oleh programmer lain.

Sekarang mari kita buat kelas.

Kelas TestClass ( // Ini adalah isi kelas. )

Di PHP, kami menggunakan kata kelas untuk mendeklarasikan suatu kelas. Nama kelas peka huruf besar-kecil.

Kelas yang kosong tidak masuk akal, jadi mari kita tambahkan sesuatu ke dalamnya. Sebuah kelas dapat berisi variabel dan fungsi. Variabel disebut properti kelas, dan fungsi disebut metode.

Kelas TestClass ( public $message = "Hai!"; fungsi sayHello() ( echo "Halo!"; ) )

Sebelum deklarasi variabel kita melihat kata public, ini adalah definisi dari cakupan properti kita. Dalam bahasa inggris public artinya publik, jadi dari namanya sudah jelas bahwa properti kelas ini tersedia untuk umum. Kita akan berbicara lebih banyak tentang ruang lingkup nanti. Untuk saat ini, bersabarlah dan kunyahlah teori yang ada saat ini.

Sekarang di kelas TestClass kita ada variabel $message dengan nilai "Hai!", variabel ini adalah properti kelas, dan fungsi sayHello, yang merupakan metode kelas.

Jadi kita punya kelas. Sekarang, berdasarkan ini, kita akan membuat objek menggunakan operator baru.

Kelas TestClass ( public $message = "Hai!"; function sayHello() ( echo "Halo!"; ) ) $govorilka = new TestClass();

Objek kita seperti salinan kelas.

Langkah selanjutnya adalah menggunakan objek tersebut. Untuk mengakses properti dan metode suatu objek, gunakan operator ->.

Untuk mengakses properti $message dari objek $govorilka, Anda hanya perlu menulis $govorilka->message. Perlu diketahui bahwa kami tidak lagi membubuhkan tanda $ di depan nama properti pesan.

Metode ini diakses dengan cara yang sama, namun kita tidak boleh melupakan tanda kurung di akhir metode, karena kita berhadapan dengan fungsi reguler.

Berikut ini contoh pengaksesan property dan method dari objek yang kita buat:

pesan; gema "
"; $govorilka->sayHello();

Kita dapat mengubah nilai properti.

pesan = "Halo."; echo $govorilka->pesan; gema "
"; $govorilka->sayHello();

Berdasarkan satu kelas, Anda dapat membuat objek sebanyak yang Anda suka.

pesan = "Halo."; echo $govorilka->pesan; gema "
"; $govorilka->sayHello(); echo "
"; // Buat objek kedua $govorilka2 = new TestClass(); echo $govorilka2->message;

Seperti yang bisa kita lihat, mengubah properti objek $govorilka tidak mengubah properti kelas TestClass, dan objek kedua sesuai dengan kelas yang menjadi instancenya.

Perlu dicatat bahwa objek sering kali disebut turunan dari suatu kelas, jadi ingatlah istilah itu.

Masih belum jelas mengapa kita membutuhkan semua ini, kelas-kelas ini, objek-objek... Mari kita buat kelas yang lebih realistis dan gunakan contohnya untuk terus bekerja.

ketik \"$ini->nama\". Deskripsi: $ini->deskripsi. Harga: $ini->harga"; ) ) $Barang = Barang baru(); $Barang->printBarang();

Perhatikan variabel semu $ini, ini adalah variabel khusus di PHP yang digunakan untuk mengakses properti kelas dalam kodenya.

Artinya, untuk mengakses properti $name kelas Barang dari metodenya sendiri, kami menggunakan konstruksi $this->name.

Sekarang mari kita perbesar contohnya sedikit; sulit untuk menyebutnya lebih rumit. Jadi:

jenis. Nama: \"$ini->nama\". Deskripsi: $ini->deskripsi. Harga: $ini->harga."; ) ) $Barang = Barang baru(); $Barang->type = "buku"; $Barang->nama = "Perang dan Damai"; $Barang->deskripsi = "Gemuk buku beberapa jilid"; $Barang->harga = "543.26"; $Barang->printBarang();

Tentu saja tidak ada gunanya melakukan semuanya dengan cara ini. Biasanya, objek menerima pengidentifikasi produk unik dan mengambil semua data dari database MySQL.

id = $id; $ini->tipe = "buku"; $this->name = "Perang dan Damai"; $this->description = "Buku tebal beberapa jilid"; $ini->harga = "543,26"; ) fungsi printGoods() ( echo " ID Produk: $ini->id. Tipe produk: $ini->tipe. Nama: \"$ini->nama\". Deskripsi: $ini->deskripsi. Harga: $ini ->harga."; ) ) $Barang = Barang baru(124); $Barang->printBarang();

Ada terlalu banyak hal baru dalam contoh ini.

Pertama, perhatikan nama metode __construct(). Ini adalah kata khusus dalam PHP dan metode ini akan berjalan secara otomatis ketika objek dibuat. Metode seperti ini disebut konstruktor.

Saat kami membuat objek baru Barang(124), kami meneruskan nomor 124 ke konstruktor, menurut legenda :), menerima produk yang sesuai dari database dan menentukan properti objek sesuai dengan informasi dari database. basis data.

Properti objek kami memiliki cakupan yang dilindungi, yaitu dilindungi. Kami tidak dapat mengakses properti tersebut langsung dari kode klien.

Kode klien adalah kode yang menggunakan kelas, objek, atau fungsi. Ini adalah istilah yang penting, ingatlah itu.

Berikut ini contoh upaya mengakses properti yang dilindungi dari kode klien:

harga;

Contoh ini akan mengembalikan kesalahan: "Tidak dapat mengakses Barang milik yang dilindungi". Seharusnya begitu, kita pergi ke tempat yang tidak ada aksesnya.

Ringkasan

Jadi apa yang kita pelajari di halaman ini:

  • Apa itu kelas? Mengapa kita membutuhkan kelas? Cara membuat kelas menggunakan kelas kata yang dicadangkan.
  • Apa itu properti dan metode kelas.
  • Cara menggunakan operator baru untuk membuat objek dari beberapa kelas.
  • Cara mengakses properti dan metode suatu kelas dari suatu objek menggunakan konstruksi ->.
  • Bagaimana mengubah properti kelas dari suatu objek.
  • Lingkup properti dan metode. Cara membatasi ruang lingkup menggunakan kata dilindungi.
  • Cara mengakses properti metode di kelas menggunakan variabel semu $ini.
  • Membuat konstruktor menggunakan metode __construct().

Ini hanyalah langkah pertama dalam menguasai objek. Secara umum, masih belum jelas mengapa semua ini diperlukan. Namun gambaran benda-benda tersebut akan menjadi jelas nantinya, asalkan Anda memiliki kesabaran.

Hal berikutnya yang perlu kita pelajari adalah pewarisan di PHP. Pada bagian ini, kita tidak hanya akan mempelajari mekanisme pewarisan, tetapi juga dapat memberikan contoh yang benar-benar relevan dalam penggunaan kelas dan objek.

Dari Zandstra

hal.51 - memeriksa argumen yang diteruskan ke metode untuk kesesuaian dengan tipe kelas (Anda juga dapat memeriksa keberadaan array).

halaman 56 - operator instanceof (contoh bahasa Inggris), memeriksa apakah argumen kiri cocok dengan tipe objek di argumen kanan.

Kelas dan objek di PHP

Kelas adalah konsep dasar dalam pemrograman berorientasi objek (OOP). Kelas membentuk dasar sintaksis OOP. Mereka dapat dianggap sebagai semacam "wadah" untuk data dan fungsi yang terkait secara logis (biasa disebut - lihat di bawah). Sederhananya, kelas adalah sejenis tipe data.

Sebuah instance dari suatu kelas adalah Sebuah Objek. Objek adalah kumpulan data () dan fungsi (metode) untuk memprosesnya. Properti dan metode dipanggil. Secara umum, objek adalah segala sesuatu yang mendukung enkapsulasi.

Jika suatu kelas dapat dianggap sebagai tipe data, maka suatu objek dapat dianggap sebagai variabel (dengan analogi). Script dapat bekerja secara bersamaan dengan beberapa objek dari kelas yang sama, serta dengan beberapa variabel.

Dalam suatu objek, data dan kode (anggota kelas) bisa bersifat publik atau tidak. Data publik dan anggota kelas dapat diakses oleh bagian lain dari program yang bukan merupakan bagian dari objek. Namun data pribadi dan anggota kelas hanya tersedia di dalam objek ini.

Deskripsi kelas di PHP dimulai dengan kata fungsi kelas:

kelas Nama Kelas (
// deskripsi anggota kelas - properti dan metode pemrosesannya
}

Untuk mendeklarasikan suatu objek Anda harus menggunakan operator baru:

Objek = Nama Kelas baru;

Data dijelaskan menggunakan kata fungsi var. Metode ini dijelaskan dengan cara yang sama seperti fungsi biasa yang ditentukan pengguna. Anda juga dapat meneruskan parameter ke metode tersebut.

Mari kita rangkum: deklarasi kelas harus dimulai dengan kata kunci kelas(mirip dengan bagaimana deklarasi fungsi dimulai dengan kata kunci fungsi). Setiap deklarasi properti yang terdapat dalam suatu kelas harus didahului dengan kata kunci var. Properti dapat berupa semua jenis data yang didukung oleh PHP dan dapat dianggap sebagai variabel dengan perbedaan kecil. Deklarasi properti diikuti dengan deklarasi metode, yang sangat mirip dengan deklarasi fungsi yang ditentukan pengguna pada umumnya.

Menurut aturan yang berlaku umum, nama kelas OOP dimulai dengan huruf kapital, dan semua kata dalam nama metode, kecuali yang pertama, dimulai dengan huruf kapital (kata pertama dimulai dengan huruf kecil). Tentu saja, Anda dapat menggunakan notasi apa pun yang Anda rasa nyaman; yang utama adalah memilih standar dan menaatinya.

Contoh kelas di PHP:

// Buat kelas Coor baru:
kelas Coor (
// data (properti):
var$nama;
var $tambahan;

// metode:
Nama fungsi() (
gema "

Yohanes

" ;
}

}


$objek = Coor baru;
?>

Mengakses kelas dan objek di PHP

Kami melihat bagaimana kelas dideskripsikan dan objek dibuat. Sekarang kita perlu mengakses anggota kelas, untuk tujuan ini di PHP ada operator -> . Berikut ini contohnya:

// Buat kelas Coor baru:
kelas Coor (
// data (properti):
var$nama;

// metode:
fungsi NamaDapatkan() (
gema "

Yohanes

" ;
}

}

// Buat objek kelas Coor:
$objek = Coor baru;
// Dapatkan akses ke anggota kelas:
$objek -> nama = "Alex" ;
echo $objek -> nama;
// Mencetak "Alex"
// Sekarang mari kita akses metode kelas (sebenarnya, sebuah fungsi di dalam kelas):
$objek -> NamaDapatkan();
// Mencetak "John" dengan huruf kapital
?>

Untuk mengakses anggota kelas dalam suatu kelas, Anda harus menggunakan pointer $ini, yang selalu mengacu pada objek saat ini. Metode yang dimodifikasi Dapatkan Nama():

fungsi NamaDapatkan() (
echo $ini->nama;
}

Dengan cara yang sama, Anda dapat menulis sebuah metode Nama yang ditetapkan():

fungsi Nama Set($nama) (
$ini->nama = $nama;
}

Sekarang Anda dapat menggunakan metode untuk mengubah nama Nama yang ditetapkan():

$objek->NamaSet("Peter");
$objek->Getname();

Dan berikut daftar kode lengkapnya:

// Buat kelas Coor baru:
kelas Coor (
// data (properti):
var$nama;

// metode:
fungsi NamaDapatkan() (
echo $ini -> nama;
}

fungsi Nama Set($nama) (
$ini -> nama = $nama ;
}

}

// Buat objek kelas Coor:
$objek = Coor baru;
// Sekarang untuk mengganti nama kita menggunakan metode Setname():
$objek -> Nama Set("Nama Panggilan");
// Dan untuk akses, seperti sebelumnya, Getname():
$objek -> NamaDapatkan();
// Skrip mencetak "Nick"
?>

penunjuk $ini juga dapat digunakan untuk mengakses metode, bukan hanya akses data:

fungsi Nama Set($nama) (
$ini->nama = $nama;
$ini->NamaDapatkan();
}

Konstruktor

Seringkali, saat membuat objek, Anda perlu mengatur nilai beberapa properti. Untungnya, pengembang teknologi OOP memperhitungkan keadaan ini dan menerapkannya dalam konsep. Konstruktor adalah metode yang menetapkan nilai beberapa properti (dan juga dapat memanggil metode lain). Konstruktor dipanggil secara otomatis ketika objek baru dibuat. Untuk memungkinkan hal ini, nama metode konstruktor harus sesuai dengan nama kelas yang memuatnya. Contoh konstruktor:

halaman web kelas (
var $bgwarna;
fungsi Halaman Web($warna)(
$ini -> bgcolor = $warna ;
}
}

// Panggil konstruktor kelas Halaman Web
$halaman = Halaman Web baru("coklat");
?>

Sebelumnya, pembuatan objek dan inisialisasi properti dilakukan secara terpisah. Konstruktor mengizinkan Anda melakukan tindakan ini dalam satu langkah.

Detail yang menarik: bergantung pada jumlah parameter yang diteruskan, konstruktor berbeda dapat dipanggil. Dalam contoh yang dipertimbangkan, objek kelas Halaman web dapat dibuat dengan dua cara. Pertama, Anda dapat memanggil konstruktor, yang hanya membuat objek tetapi tidak menginisialisasi propertinya:

$halaman = Halaman Web baru;

Kedua, sebuah objek dapat dibuat menggunakan konstruktor yang ditentukan dalam sebuah kelas - dalam hal ini, Anda membuat objek dari kelas Halaman Web dan memberikan nilai pada propertinya. bgcolor:

$halaman = Halaman Web baru("coklat");

Destruktor

Tidak ada dukungan langsung di PHP. Namun, Anda dapat dengan mudah mensimulasikan destruktor dengan memanggil fungsi PHP tidak disetel(). Fungsi ini menghancurkan konten variabel dan mengembalikan sumber daya yang digunakannya ke sistem. Dengan benda tidak disetel() bekerja dengan cara yang sama seperti dengan variabel. Katakanlah Anda sedang mengerjakan suatu objek $Halaman Web. Setelah selesai mengerjakan objek khusus ini, fungsinya disebut:

tidak disetel($Halaman Web);

Perintah ini menghapus semua konten dari memori $Halaman Web. Dalam semangat enkapsulasi, Anda dapat melakukan panggilan tidak disetel() menjadi metode bernama menghancurkan() dan kemudian menyebutnya:

$Situs Web->hancurkan();

Kebutuhan untuk memanggil destruktor hanya muncul ketika bekerja dengan objek yang menggunakan sumber daya dalam jumlah besar, karena semua variabel dan objek secara otomatis dimusnahkan ketika skrip selesai.

Inisialisasi objek

Terkadang ada kebutuhan untuk menginisialisasi suatu objek - untuk menetapkan propertinya ke nilai awal. Anggap saja nama kelasnya adalah Koor dan berisi dua properti: nama orang tersebut dan kota tempat tinggalnya. Anda dapat menulis metode (fungsi) yang akan menginisialisasi suatu objek, misalnya Init():

// Buat kelas Coor baru:
kelas Coor (
// data (properti):
var$nama;
var $kota;

// Metode inisialisasi:
fungsi Init($nama) (
$ini -> nama = $nama ;
$ini -> kota = "London" ;
}

}

// Buat objek kelas Coor:
$objek = Coor baru;
// Untuk menginisialisasi objek, segera panggil metode:
$objek -> Init();
?>

Hal utama adalah jangan lupa memanggil fungsi segera setelah membuat objek, atau memanggil beberapa metode di antara pembuatan (operator baru) objek dan inisialisasinya (memanggil Init).

Agar PHP mengetahui bahwa suatu metode tertentu perlu dipanggil secara otomatis ketika suatu objek dibuat, maka perlu diberi nama yang sama dengan kelasnya ( Koor):

fungsi Koord ($nama)
$ini->nama = $nama;
$ini->kota = "London";
}

Metode yang menginisialisasi suatu objek disebut konstruktor. Namun, PHP tidak memiliki destruktor karena sumber daya dilepaskan secara otomatis ketika skrip keluar.

Mengakses Elemen Kelas

Elemen kelas diakses menggunakan operator :: "titik dua" Menggunakan "titik dua" Anda dapat mengakses metode kelas.

Saat mengakses metode kelas, pemrogram harus menggunakan nama kelas tersebut.

kelas A (
contoh fungsi() (
gema "Ini adalah fungsi A::example() yang asli.
"
;
}
}

Kelas B memanjang A (
contoh fungsi() (
gema "Ini merupakan penggantian dari B::example().
"
;
J::contoh();
}
}

// Tidak perlu membuat objek kelas A.
// Menampilkan output berikut:
// Ini adalah fungsi A::example() yang asli.
J::contoh();

// Membuat objek kelas B.
$b = forum portal B PHP baru. S.U.

Dalam tutorial ini Anda akan mempelajari dasar-dasar pemrograman berorientasi objek di PHP. Anda akan mempelajari prinsip-prinsip OOP secara umum dan mempelajari cara menulis skrip sederhana di PHP.

Selamat datang di seri pertama pelajaran OOP di PHP! Setelah menyelesaikan semua pelajaran dalam seri ini, Anda akan mempelajari prinsip dan konsep dasar OOP serta mempelajari cara membuat aplikasi berguna di PHP dengan cepat dan mudah.

Dalam tutorial ini saya akan mulai memberi Anda informasi terkini dan memberi tahu Anda tentang konsep dasar OOP. Anda akan belajar:

  • apa itu OOP
  • bagaimana OOP akan membantu Anda membuat skrip PHP yang lebih baik
  • beberapa konsep dasar seperti kelas, objek, metode, variabel kelas
  • di mana untuk mulai menulis skrip PHP

Apakah Anda siap untuk terjun ke dunia objek PHP? Kalau begitu silakan!

Apa itu pemrograman berorientasi objek?

Jika Anda pernah membuat dan menggunakan fungsi khusus di PHP, Anda telah menggunakan gaya pemrograman prosedural. Dalam pemrograman prosedural, Anda biasanya membuat struktur data - angka, string, array, dll. - untuk menyimpan beberapa data, dan kemudian memproses struktur ini dengan fungsi khusus yang memanipulasi data ini.

Pemrograman berorientasi objek, atau OOP, telah maju karena di sini kita menyimpan struktur data dan fungsi yang memprosesnya dalam satu entitas yang disebut objek. Daripada memproses data dengan beberapa fungsi, Anda memuat data tersebut ke dalam objek dan kemudian memanggil metodenya untuk memanipulasinya dan mendapatkan hasil yang diinginkan.

Seringkali, objek yang dibuat menggunakan OOP mencerminkan entitas nyata. Misalnya, jika Anda membuat forum untuk situs Anda, Anda akan membuat objek Anggota yang akan menyimpan informasi tentang setiap anggota forum (nama, login, email, kata sandi, dll.), serta metode yang akan memproses informasi ini ( pendaftaran, otorisasi, logout, larangan, dll.).

Mengapa menggunakan OOP?

Prosedural dan berorientasi objek adalah dua cara berbeda untuk melakukan hal yang sama. Ini bukan untuk mengatakan bahwa salah satunya lebih baik dari yang lain - semua orang menulis sesuka mereka, sehingga Anda bahkan dapat dengan mudah menggabungkan kedua pendekatan ini dalam satu skrip.

Namun, berikut beberapa manfaat OOP bagi pengembang:

  • Lebih mudah untuk mencerminkan situasi nyata: seperti yang saya sebutkan di atas, objek mencerminkan entitas nyata - orang, produk, kartu, artikel blog, dll. Ini sangat menyederhanakan tugas ketika Anda baru mulai merancang aplikasi Anda, karena tujuan dari setiap objek seperti suatu tujuan, hubungan antar objek akan menjadi jelas dan dapat dimengerti.
  • Lebih mudah untuk menulis program modular: OOP melibatkan penulisan modul. Dengan membagi kode Anda menjadi beberapa modul, akan lebih mudah bagi Anda untuk mengelola, men-debug, dan memperluasnya.
  • Lebih mudah untuk menulis kode yang akan digunakan berkali-kali: Menulis kode yang dapat digunakan lebih dari sekali akan menghemat waktu saat menulis aplikasi, dan seiring berjalannya waktu Anda bahkan dapat membuat seluruh perpustakaan dari modul-modul semacam ini yang dapat Anda gunakan di banyak aplikasi. aplikasi. Dengan OOP, penulisan kode menjadi lebih mudah karena struktur data dan fungsi dienkapsulasi dalam satu objek yang dapat digunakan berkali-kali.

Beberapa Konsep Dasar

Sebelum Anda mulai menulis skrip, Anda perlu memiliki pemahaman yang baik tentang konsep kelas, objek, variabel kelas, dan metode.

Kelas

Kelas adalah kerangka untuk suatu objek. Ini adalah bagian kode yang mendefinisikan:

  • Tipe data yang akan berisi objek kelas yang dibuat
  • Fungsi yang akan memuat objek-objek ini.

Saat Anda membuat aplikasi OOP, biasanya Anda akan membuat beberapa kelas yang akan mewakili berbagai jenis entitas dalam aplikasi Anda. Misalnya untuk membuat forum, Anda dapat membuat kelas Forum, Topik, Posting, dan Anggota.

Objek

Objek adalah tipe variabel khusus yang dibuat melalui kelas. Ini berisi data aktual dan fungsi untuk memanipulasinya. Anda dapat membuat objek sebanyak yang Anda suka dari satu kelas. Setiap fungsi suatu objek tidak bergantung pada objek lain, meskipun fungsi tersebut dibuat dari kelas yang sama.

Sebagai perbandingan dengan entitas nyata:

  • Kelas adalah kerangka kerja untuk sebuah mobil: ia mendefinisikan bagaimana mobil akan terlihat dan bertindak, namun tetap merupakan entitas abstrak
  • Objek adalah mobil nyata yang dibuat dari gambar rangka: ia memiliki sifat nyata (seperti kecepatan) dan perilaku (seperti akselerasi atau pengereman).

Catatan: Suatu objek sering disebut esensi suatu kelas, dan proses pembuatan objek suatu kelas disebut implementasi.

Variabel Kelas

Nilai data yang disimpan dalam suatu objek tertentu ditulis ke variabel khusus yang disebut variabel kelas. Variabel kelas berhubungan erat dengan objeknya. Meskipun semua objek suatu kelas memiliki variabel yang sama, nilainya mungkin berbeda.

Metode

Fungsi yang didefinisikan dalam suatu kelas dan digunakan pada objek kelas tersebut disebut metode. Fungsi tersebut tidak jauh berbeda dengan fungsi biasa - Anda dapat meneruskan nilai ke fungsi tersebut, fungsi tersebut dapat berisi variabel lokal dan mengembalikan nilai. Namun, metode lebih sering bekerja dengan variabel objek. Misalnya, metode login() untuk memasukkan pengguna ke forum Anda dapat menyetel variabel kelas login ke true.

Bagaimana cara membuat kelas di PHP?

Sekarang Anda sudah mengetahui apa itu kelas, metode, variabel kelas, dan objek, sekarang saatnya membuat beberapa kelas dan objek dalam kode PHP.

Pertama, mari kita lihat cara membuat kelas. Pada dasarnya skrip untuk membuat kelas terlihat seperti ini:

Kelas ClassName ( // (definisi kelas) )

Misalnya, jika Anda membuat kelas Anggota untuk forum Anda, Anda akan menulis ini:

Anggota Kelas ( // (definisi kelas) )

Ini cukup sederhana. Tentu saja, kelas ini tidak akan melakukan apa pun sampai Anda menambahkan variabel dan metode ke dalamnya. Namun kode di atas membuat kelas PHP valid yang dapat digunakan.

Aturan praktis yang baik: tempatkan setiap kelas dalam file terpisah dengan nama yang sama dengan nama kelasnya. Misalnya, letakkan kelas Member di file Member.php dan simpan di folder, katakanlah, kelas.

Bagaimana cara membuat objek di PHP?

Anda dapat membuat objek menggunakan kata kunci baru:

Nama Kelas Baru()

Kode ini akan membuat objek kelas ClassName. Anda perlu menggunakan objek ini nanti, jadi Anda perlu menyimpannya dalam sebuah variabel. Sebagai contoh, mari kita membuat sebuah objek dari kelas Member dan menyimpannya dalam variabel $member:

$anggota = Anggota baru();

Kita juga bisa membuat objek lain dari kelas yang sama:

$anggota2 = Anggota baru();

Meskipun kita membuat kedua objek ini dari kelas yang sama, variabel $member dan $member2 tidak bergantung satu sama lain.

Membuat variabel kelas

Sekarang kita sudah mengetahui cara membuat kelas dan objek kelas, mari kita lihat cara membuat variabel kelas. Ada 3 pengakses untuk variabel kelas yang dapat ditambahkan ke kelas:

  • Variabel kelas publik (publik): dapat diakses - mis. mereka dapat dibaca dan/atau dimodifikasi - di mana saja dalam skrip, di mana pun kode ini berada - di dalam atau di luar kelas
  • Variabel kelas privat (pribadi): hanya dapat diakses oleh metode kelas. Yang terbaik adalah menjadikan variabel kelas bersifat pribadi untuk memisahkan objek dari kode lainnya.
  • Variabel kelas yang dilindungi: Tersedia untuk metode kelas Anda sendiri, serta metode kelas yang diwarisi (kita akan membicarakan pewarisan nanti).

Untuk membuat variabel kelas, tuliskan kata kunci public, private, atau protected, lalu masukkan nama variabelnya:

Nama Kelas Kelas ( public $propertyName; private $propertyName; protected $propertyName; )

Mari tambahkan variabel kelas publik ke kelas Anggota untuk menyimpan nama pengguna:

Anggota Kelas ( public $username = ""; )

Perhatikan bahwa kita telah menginisialisasi variabel kelas kita, nilainya adalah string kosong, “”. Ini berarti bahwa ketika pengguna baru dibuat, nama pengguna akan default ke string kosong. Seperti halnya variabel reguler di PHP, variabel kelas tidak harus diinisialisasi, tetapi lebih baik jangan malas. Jika Anda tidak menginisialisasi variabel kelas, nilai defaultnya adalah null.

Mengakses Variabel Kelas

Untuk mendapatkan akses ke variabel suatu objek, gunakan operator ->:

$objek->namaproperti

Mari mencoba. Mari kita menulis skrip yang mendeklarasikan kelas Anggota dan variabel kelas, membuat objek kelas ini, lalu menetapkan nilai variabel kelas dan menampilkannya di layar:

nama pengguna = "Fred"; echo $anggota->nama pengguna; // Cetak "Fred" ?>

Jalankan kode ini, maka akan muncul string “Fred”, nilai variabel kelas $member->nama pengguna. Seperti yang Anda lihat, Anda mengoperasikan variabel objek seperti variabel biasa - Anda dapat mengaturnya ke suatu nilai dan membacanya.

Menambahkan Metode ke Kelas

Bagaimana dengan membuat metode? Seperti yang saya sebutkan sebelumnya, metode hanyalah fungsi biasa yang merupakan bagian dari suatu kelas. Jadi Anda mungkin tidak akan terkejut jika keduanya dibuat menggunakan kata kunci fungsi yang sama. Satu-satunya perbedaan dari membuat fungsi biasa adalah Anda juga dapat menambahkan salah satu pengidentifikasi akses (publik, privat, dilindungi) ke deklarasinya. Dengan cara ini, metode mirip dengan variabel kelas:

Kelas ClassName ( fungsi publik MethodName() ( // (kode) ) fungsi pribadi MethodName() ( // (kode) ) fungsi yang dilindungi MethodName() ( // (kode) ) )

Catatan: seperti halnya variabel kelas, metode publik dapat dipanggil dari mana saja, metode privat hanya dapat dipanggil di dalam kelas, dan metode yang dilindungi dapat dipanggil dari kelas itu sendiri dan turunannya.

Mari kita coba menambahkan beberapa metode dan variabel kelas ke kelas kita:

  • variabel kelas $loggedIn pribadi untuk mengidentifikasi pengguna, mis. apakah dia masuk atau tidak,
  • login() metode, yang akan masuk ke forum dengan menyetel variabel kelas $loggedIn ke true,
  • metode logout(), yang akan keluar dari forum dengan menyetel variabel kelas $loggedIn ke false,
  • metode isLoggedIn(), yang akan mengembalikan nilai variabel kelas $loggedIn.

Ini kode kami:

masuk = benar; ) fungsi publik logout() ( $this->loggedIn = false; ) fungsi publik isLoggedIn() ( return $this->loggedIn; ) ) ?>

Anda mungkin memperhatikan bahwa kami menggunakan kata kunci $this yang baru. Dalam konteks metode suatu objek, variabel khusus $this merujuk pada objek itu sendiri. Dengan menggunakan $this dalam metode objek, metode tersebut dapat mengakses variabel kelas dan metode objek apa pun.

Misalnya, metode login() dapat mengakses variabel kelas $loggedIn objek melalui $this->loggedIn.

Ngomong-ngomong, variabel kelas kita bersifat pribadi, jadi tidak bisa dipanggil dari bagian mana pun dalam skrip, melainkan hanya dari metode login(), logout(), dan isLoggedIn(). Ini adalah pendekatan yang baik karena bagian dalam objek (seperti bagaimana tepatnya ia mencatat apakah pengguna masuk atau tidak) terpisah dari kode lainnya. Jika memungkinkan, coba gunakan variabel kelas privat sehingga objek Anda otonom, mobile, dan terlindungi.

Catatan: variabel kelas $username dalam contoh kita bersifat publik. Saya melakukan ini hanya untuk menunjukkan bagaimana Anda dapat mengakses variabel kelas suatu objek. Dalam proyek nyata, Anda lebih suka menjadikan variabel ini pribadi dan membuat variabel kelas publik khusus untuk menetapkan nilai nama pengguna jika diperlukan.

Menggunakan Metode

Untuk memanggil metode pada suatu objek, gunakan operator -> yang sudah Anda kenal.

$objek->namametode()

Ini berfungsi seperti memanggil fungsi biasa. Anda dapat meneruskan argumen dalam tanda kurung (dengan asumsi tentu saja diperlukan argumen apa pun), dan pemanggilan metode juga dapat mengembalikan nilai tertentu yang kemudian dapat Anda gunakan.

masuk = benar; ) fungsi publik logout() ( $this->loggedIn = false; ) fungsi publik isLoggedIn() ( return $this->loggedIn; ) ) $member = Anggota baru(); $anggota->nama pengguna = "Fred"; echo $anggota->nama pengguna . "adalah". ($anggota->
"; $member->login(); echo $member->username . " adalah " . ($member->isLoggedIn() ? "log in" : "log out") . "
"; $member->logout(); echo $member->username . " adalah " . ($member->isLoggedIn() ? "log in" : "logout") . "
"; ?>

Skrip ini akan menampilkan yang berikut:

Fred logout Fred login Fred logout

Begini cara kerjanya:

  1. Setelah mendeskripsikan kelas Member, kita membuat objeknya dan menyimpannya dalam variabel $member. Kami juga memberi variabel kelas $nama pengguna objek ini nilai “Fred”.
  2. Kami kemudian memanggil metode $member->isLoggedIn() untuk menentukan apakah pengguna login atau tidak. Metode ini hanya mengembalikan nilai variabel kelas $loggedIn. Karena nilai default variabel kelas ini salah, hasil pemanggilan $member->isLoggedIn() akan salah, sehingga pesan "Fred sudah logout" akan ditampilkan.
  3. Kemudian kita memanggil metode login(). Ini akan mengatur variabel kelas $loggedIn menjadi true.
  4. Sekarang, ketika memanggil metode $member->isLoggedIn(), itu akan mengembalikan nilai true dan menampilkan pesan "Fred sudah login".
  5. Mari kita panggil metode logout(), yang menetapkan nilai properti $loggedIn menjadi false.
  6. Mari kita panggil metode $member->isLoggedIn() untuk ketiga kalinya. Sekarang akan mengembalikan false karena properti $loggedIn disetel ke false lagi. Jadi, pesan “Fred is logout” akan ditampilkan kembali.

Catatan: jika Anda melihat ini pertama kali: ?: adalah operator ternary. Ini adalah versi sederhana dari blok if...else. Anda dapat mempelajari tentang jenis operator ini.

kesimpulan

Dalam tutorial ini Anda mempelajari dasar-dasar OOP di PHP. Anda belajar tentang hal-hal seperti:

  • Apa itu OOP dan mengapa berguna?
  • konsep kelas, objek, variabel kelas dan metode
  • cara membuat kelas dan objek
  • cara membuat dan menggunakan variabel kelas
  • konsep pengidentifikasi akses publik, pribadi, dilindungi
  • cara membuat dan menggunakan metode kelas

Anda telah belajar banyak tentang hal ini, dan Anda akan belajar lebih banyak lagi dalam pelajaran berikut. Namun, jika Anda telah mengerjakan semua contoh yang saya berikan, Anda memiliki dasar yang kuat. Anda dapat mulai membuat aplikasi menggunakan OOP.

Karena kelaslah yang mendeskripsikan objek, kita akan memulai deskripsi dengan definisi kelas.

Definisi Kelas

Kelas adalah pola kode yang digunakan untuk membuat objek. Sebuah kelas didefinisikan menggunakan kata kunci class diikuti dengan nama kelas yang berubah-ubah. Nama kelas boleh menggunakan kombinasi huruf dan angka apa saja, namun tidak boleh diawali dengan angka. Kode yang terkait dengan suatu kelas harus diapit kurung kurawal, yang muncul setelah namanya. Definisi kelas menjelaskan elemen apa yang akan terkandung dalam setiap instance baru dari kelas tersebut. Berdasarkan data yang diperoleh, mari kita lihat sintaks definisi kelas menggunakan contoh:

Kelas pertama dari contoh di atas sudah merupakan kelas yang lengkap, meskipun belum terlalu berguna. Namun demikian, kami melakukan sesuatu yang sangat penting. Kami telah mendefinisikan tipenya, yaitu. membuat kategori data yang dapat kita gunakan dalam skrip kita. Pentingnya hal ini akan menjadi jelas bagi Anda saat Anda membaca lebih lanjut bab ini.

Membuat Objek

Karena kelas adalah templat untuk membuat objek, maka objek adalah data yang dibuat dan disusun menurut templat yang ditentukan di kelas. Suatu objek disebut juga turunan dari suatu kelas yang tipenya ditentukan oleh kelas tersebut. Untuk membuat instance kelas baru, kita memerlukan operator baru. Ini digunakan bersama dengan nama kelas sebagai berikut:

Setelah operator baru, nama kelas yang menjadi dasar pembuatan objek ditunjukkan. Operator baru membuat turunan kelas dan mengembalikan referensi ke objek yang baru dibuat. Referensi ini disimpan dalam variabel dengan tipe yang sesuai. Sebagai hasil dari mengeksekusi kode ini, dua objek bertipe pertama akan dibuat. Meskipun keduanya secara fungsional identik (yaitu kosong), $obj1 dan $obj2 adalah dua objek berbeda dengan tipe yang sama, dibuat menggunakan kelas yang sama.

Kalau masih bingung, mari kita gunakan analogi kehidupan nyata. Bayangkan suatu kelas adalah cetakan pengecoran yang digunakan untuk membuat mobil plastik. Objeknya adalah mobil. Jenis benda yang dibuat ditentukan oleh bentuk pengecorannya. Mobil-mobil terlihat sama dalam segala hal, tetapi objeknya tetap berbeda. Dengan kata lain, mereka adalah contoh berbeda dari tipe yang sama.

Mari kita buat objek ini sedikit lebih menarik dengan memodifikasi kelas pertama untuk menyertakan bidang data khusus yang disebut properti.

Mendefinisikan Properti

Variabel dapat didefinisikan dalam suatu kelas. Variabel yang didefinisikan dalam suatu kelas disebut properti (atau bidang data). Mereka didefinisikan dengan salah satu kata kunci yang dilindungi, publik atau pribadi yang menjadi ciri kontrol akses. Kami akan melihat kata kunci ini secara rinci di bab berikutnya. Sekarang mari kita definisikan beberapa properti menggunakan kata kunci public:

Seperti yang Anda lihat, kami telah mendefinisikan dua properti, memberikan nilai pada masing-masing properti. Sekarang objek apa pun yang kita buat menggunakan kelas pertama akan memiliki dua properti dengan nilai yang ditentukan.

Catatan: menginisialisasi nilai properti harus literal (nilai konstan), tidak perlu menginisialisasi properti di kelas (jika nilai tidak ditentukan, maka defaultnya adalah NULL).

Properti objek dapat diakses menggunakan simbol " -> ", yang menentukan objek dan nama properti. Karena properti objek telah didefinisikan sebagai publik, kita dapat membaca nilainya dan juga memberikan nilai baru padanya, sehingga menggantikan nilai awal yang ditentukan di kelas:

str; // memberi nilai baru pada properti objek $obj->str = "baris baru"; gema "
$obj->str"; ?>

Faktanya, di PHP tidak perlu mendeklarasikan semua properti di suatu kelas. Properti dapat ditambahkan ke objek secara dinamis:

newprop = "properti baru"; echo $obj->prop baru; ?>

Perlu dicatat bahwa metode penetapan properti ke objek ini dianggap bentuk buruk dalam pemrograman berorientasi objek dan hampir tidak pernah digunakan.

Bekerja dengan Metode

Metode adalah fungsi biasa yang didefinisikan dalam suatu kelas, metode memungkinkan objek melakukan berbagai tugas. Deklarasi metode menyerupai definisi fungsi biasa, hanya saja ia didahului oleh salah satu kata kunci yang dilindungi, publik, atau pribadi. Jika Anda menghilangkan kata kunci visibilitas dalam definisi metode, metode tersebut akan dinyatakan publik secara implisit. Metode suatu objek dapat diakses menggunakan simbol " -> ", yang menentukan objek dan nama metode. Saat memanggil suatu metode, sama seperti saat memanggil suatu fungsi, Anda harus menggunakan tanda kurung.

str; ) ) $obj = baru dulu(); // memanggil metode objek $obj->getstr(); ?>

Kami telah menambahkan metode gettr() ke kelas pertama. Perhatikan bahwa kita tidak menggunakan kata kunci scope saat mendefinisikan metode ini. Artinya metode gettr() bertipe publik dan dapat dipanggil di luar kelas.

Dalam definisi metode, kami menggunakan variabel semu khusus $this. Ini digunakan untuk mengakses metode atau properti dalam kelas dan memiliki sintaks berikut:

$this->nama variabel atau metode

Kelas pertama ( public $str = "some text"; // saat mendefinisikan metode di kelas, variabel $this tidak memiliki nilai fungsi gettr() ( echo $this->str; ) ) // membuat objek $obj = baru dulu(); // objek yang kita buat mempunyai properti dan metode // sekarang dalam metode objek, variabel $this memiliki // tautan ke objek saat ini, yaitu $obj // mis. jika dalam suatu metode kita mengganti $this dengan instance objek saat ini $this->str; // ini akan terlihat seperti // akses sederhana ke properti objek saat ini $obj->str;

Catatan: $this tidak dapat diberikan apa pun. Ingatlah bahwa $this selalu mengacu pada objek saat ini.

Metode khusus - konstruktor

Sebuah kelas dapat memiliki metode khusus yang ditentukan - konstruktor, yang dipanggil setiap kali instance baru dari kelas (objek) dibuat untuk menginisialisasinya, misalnya, menetapkan nilai properti. Konstruktor, seperti metode lainnya, dapat memiliki parameter. Untuk mendefinisikan metode sebagai konstruktor, Anda harus memanggilnya __construct() . Harap dicatat bahwa nama metode harus dimulai dengan dua garis bawah. Mari kita lihat cara kerjanya:

angka1 = $angka1; $ini->angka2 = $angka2; ) // metode yang menambahkan dua angka fungsi summa() ( return $this->num1 + $this->num2; ) ) // membuat objek dan meneruskan dua argumen $obj = new first(15, 35); // memanggil metode dan segera menampilkan hasil kerjanya echo $obj->summa(); ?>

Metode __construct dipanggil ketika sebuah objek dibuat menggunakan operator baru. Argumen yang ditentukan dalam tanda kurung diteruskan ke konstruktor. Metode konstruktor menggunakan variabel semu $this untuk memberikan nilai pada properti terkait dari objek yang dibuat.

Catatan: jika konstruktor tidak memiliki parameter dan tidak ada argumen yang diteruskan saat membuat instance kelas baru, tanda kurung () setelah nama kelas dapat dihilangkan: $obj = new first;

Menentukan Jenis Argumen dalam Metode

Secara default, suatu metode dapat menerima argumen jenis apa pun, namun ada kalanya Anda ingin memastikan bahwa suatu metode hanya dapat menerima instance dari kelas tertentu sebagai argumen. Untuk menunjukkan tipe argumen yang diterima, cukup tempatkan nama kelas dalam definisi metode sebelum nama parameter:

getobj(kucing baru()); // akan ada kesalahan: sebuah instance bertipe salah dilewatkan sebagai argumen $kitty->getobj(new false()); ?>

Sekarang Anda hanya dapat meneruskan instance bertipe cat sebagai argumen ke metode getobj(). Karena metode getobj() berisi kualifikasi tipe kelas, meneruskannya ke objek dengan tipe yang salah akan menghasilkan kesalahan.

Petunjuk tipe tidak dapat digunakan untuk mendefinisikan parameter tipe primitif seperti string, angka, dll. Untuk tujuan ini, fungsi pengecekan tipe seperti is_string() harus digunakan di badan metode. Dimungkinkan juga untuk menentukan bahwa argumen yang diteruskan adalah array:

my_arr = $some_arr; ) ) ?>

Hal terakhir yang harus dikatakan adalah jika parameter metode didefinisikan dengan kelas tertentu, maka diperbolehkan untuk menentukan nilai default jika tidak ada objek yang diteruskan ke metode tersebut. Hanya NULL yang dapat digunakan sebagai nilai default:

Fungsi getobj(cat $getCat = null) ( $this->someVar = $getCat; )

Jika Anda menentukan nilai default lain selain NULL, kesalahan akan terjadi.