Di OOP, ada konsep "class", yang digunakan untuk memodelkan atau memetakan
entitas dunia nyata ke templat data(properti) dan fungsionalitas (method). "Object"
adalah turunan dari sebuah class, dan Anda dapat membuat banyak instance dari class
yang sama. Sebagai contoh, ada class Person tunggal, tetapi banyak object Person
dapat menjadi instance dari class ini — dan , zainab , hector , dll.
Anda juga dapat mendefinisikan method di class yang memungkinkan Anda untuk
memanipulasi nilai properti object dan melakukan operasi pada object. Sebagai contoh,
Anda bisa menentukan method save yang menyimpan informasi object ke database.
Cara terbaik untuk memahami konsep baru adalah dengan sebuah contoh. Jadi mari kita
lihat class Employee pada potongan kode berikut, yang mewakili entitas dari employee
(karyawan).
1 <?php
2 class Employee
3 {
4 private $first_name;
5 private $last_name;
6 private $age;
9 {
10 $this->first_name = $first_name;
11 $this->last_name = $last_name;
12 $this->age = $age;
13 }
14
16 {
17 return $this->first_name;
18 }
19
21 {
22 return $this->last_name;
23 }
24
26 {
27 return $this->age;
28 }
29 }
30 ?>
Properti ini bersifat private , yang berarti mereka hanya dapat diakses dari dalam class.
Ini adalah tingkat akses teraman untuk properti. Kami akan membahas berbagai tingkat
akses untuk properti dan method class nanti di artikel ini.
Jadi itu adalah pengantar singkat tentang struktur class pada PHP. Di bagian selanjutnya,
kita akan melihat cara membuat instance object dari class Employee .
Dalam konteks class Employee yang baru saja kita buat di bagian sebelumnya, mari kita
lihat bagaimana membuat instance object dari class tersebut.
1 <?php
7 ?>
Anda harus menggunakan kata kunci new ketika Anda ingin membuat instance suatu
object dari setiap class bersama dengan nama class nya, dan Anda akan mendapatkan
kembali contoh object baru dari kelas tersebut.
Jika kelas telah mendefinisikan method __construct dan membutuhkan argumen, Anda
harus meneruskan argumen tersebut saat Anda membuat instance sebuah object.
Dalam kasus kami, konstruktor class Employee memerlukan tiga argumen, dan
karenanya kami telah melewati ini ketika kami membuat objek $objEmployee . Seperti
yang kita bahas sebelumnya, method __construct dipanggil secara otomatis ketika object
dipakai.
Selanjutnya, kami telah memanggil method class pada object $objEmployee untuk
mencetak informasi yang diinisialisasi selama pembuatan object. Tentu saja, Anda dapat
membuat beberapa object dari class yang sama, seperti yang ditunjukkan pada
potongan kode berikut.
1 <?php
13 ?>
Ga
mbar berikut ini adalah representasi grafis dari class Employee dan beberapa instance-
nya.
Sederhananya, class adalah cetak biru yang dapat Anda gunakan untuk membuat object
yang terstruktur.
Enkapsulasi
Di bagian sebelumnya, kami membahas cara membuat instance objek dari
class Employee . Sangat menarik untuk dicatat bahwa object $objEmployee itu sendiri
membungkus bersama properti dan method class. Dengan kata lain, ia menyembunyikan
detail tersebut dari sisa program. Dalam dunia OOP, ini disebut enkapsulasi data.
Enkapsulasi adalah aspek penting dari OOP yang memungkinkan Anda untuk
membatasi akses ke properti atau method dari object tertentu. Dan itu membawa kita ke
topik lain untuk didiskusikan: tingkat akses.
Tingkat Akses
Saat Anda mendefinisikan properti atau method dalam sebuah class, Anda dapat
mendeklarasikannya memiliki salah satu dari tiga level akses ini — public , private ,
atau protected .
Akses Public
Saat Anda mendeklarasikan properti atau method sebagai public, properti dapat diakses
dari mana saja di luar class. Nilai properti public dapat dimodifikasi dari mana saja dalam
kode Anda.
1 <?php
2 class Person
3 {
4 public $name;
7 {
8 return $this->name;
9 }
10 }
11
15 ?>
Seperti yang Anda lihat pada contoh di atas, kami telah melakukan deklarasi
properti name untuk public. Karenanya, Anda dapat mengaturnya dari mana saja di luar
class, seperti yang kami lakukan di sini.
Akses Private
Ketika Anda mendeklarasikan properti atau method sebagai private , itu hanya dapat
diakses dari dalam class. Ini berarti bahwa Anda perlu mendefinisikan method get dan
set untuk mendapatkan dan mengatur nilai properti tersebut.
Sekali lagi, mari kita revisi contoh sebelumnya untuk memahami tingkatan akses private.
1 <?php
2 class Person
3 {
4 private $name;
5
6 public function getName()
7 {
8 return $this->name;
9 }
10
12 {
13 $this->name = $name;
14 }
15 }
16
19 $person->setName('Bob Smith');
21 ?>
Jika Anda mencoba mengakses properti private dari luar class, itu akan menimbulkan
kesalahan yang fatal Cannot access private property Person::$name . Dengan demikian,
Anda perlu mengatur nilai properti pribadi menggunakan method setter, seperti yang
kami lakukan menggunakan method setName .
Ada alasan bagus mengapa Anda mungkin ingin menjadikan properti private. Misalnya,
mungkin beberapa tindakan harus diambil (memperbarui basis data, mengatakan, atau
merender ulang template) jika properti itu berubah. Dalam hal ini, Anda dapat
mendefinisikan method setter dan menangani logika khusus ketika properti diubah.
Akses Protected
Akhirnya, ketika Anda mendeklarasikan properti atau method sebagai protected , itu
dapat diakses oleh class yang sama yang telah mendefinisikannya dan class yang
mewarisi class tersebut. Kami akan membahas inheritance pada bagian selanjutnya, jadi
kami akan kembali ke tingkat akses yang dilindungi sedikit sebentar lagi.
Inheritance
Inheritance adalah aspek penting dari paradigma pemrograman berorientasi objek yang
memungkinkan Anda mewarisi properti dan method class lain dengan melakukan extend.
class yang diwariskan disebut parent class (class induk), dan class yang mewarisi kelas
lain disebut child class. Ketika Anda melakukan instantiate sebuah object dari child
class, itu akan mewarisi properti dan method dari parent class juga.
Mari kita lihat screenshot berikut untuk memahami konsep dari pewarisan (inheritance).
Mari kita coba melalui contoh dunia nyata untuk memahami cara kerjanya.
1 <?php
2 class Person
3 {
4 protected $name;
5 protected $age;
8 {
9 return $this->name;
10 }
11
13 {
14 $this->name = $name;
15 }
16
18 {
20 }
21
23 {
25 }
26 }
27
29 {
30 private $designation;
31 private $salary;
32
34 {
35 return $this->age;
36 }
37
39 {
40 $this->age = $age;
41 }
42
44 {
45 return $this->designation;
46 }
47
48 public function setDesignation($designation)
49 {
50 $this->designation = $designation;
51 }
52
54 {
55 return $this->salary;
56 }
57
59 {
60 $this->salary = $salary;
61 }
62
64 {
65 return $this->callToProtectedNameAndAge();
66 }
67 }
68
70
71 $employee->setName('Bob Smith');
72 $employee->setAge(30);
73 $employee->setDesignation('Software Engineer');
74 $employee->setSalary('30K');
75
82 ?>
Yang penting untuk diperhatikan di sini adalah bahwa class Employee telah
menggunakan kata kunci extends untuk mewarisi class Person . Sekarang,
class Employee dapat mengakses semua properti dan method dari class Person yang
dinyatakan sebagai public atau protected. (Itu tidak dapat mengakses anggota yang
dinyatakan sebagai private).
Di sisi lain, Anda dapat menggunakan object $employee untuk melakukan set pada
properti age dari class Person , seperti yang kami lakukan pada method setAge yang
didefinisikan dalam class Employee , karena properti age dinyatakan sebagai protected.
Jadi itu pengantar singkat tentang pewarisan (inheritence). Ini membantu Anda
mengurangi duplikasi kode, dan dengan demikian mendorong konsep reusability
(penggunaan kembali kode).
Polimorfisme
Polimorfisme adalah konsep penting lainnya dalam dunia pemrograman berorientasi
objek yang mengacu pada kemampuan untuk memproses objek secara berbeda
berdasarkan tipe datanya.
Misalnya, dalam konteks pewarisan, jika child class ingin mengubah perilaku (behavior)
dari method class parent, itu dapat menggantikan metode tersebut. Ini disebut metode
overriding. Mari kita segera melihat contoh yang sesungguhnya untuk memahami konsep
dari method overriding.
1 <?php
2 class Message
3 {
7 }
8 }
11 {
13 {
15 }
16 }
17
20
23 ?>
(Beberapa bahasa berorientasi objek juga memiliki semacam kelebihan method yang
memungkinkan Anda mendefinisikan beberapa method class dengan nama yang sama
tetapi jumlah argumen yang berbeda. Ini tidak didukung secara langsung dalam PHP,
tetapi ada beberapa solusi untuk mencapai yang serupa fungsionalitasnya)
Kesimpulan
Pemrograman berorientasi objek adalah subjek yang luas, dan kami hanya menggores
permukaan kompleksitasnya. Saya berharap tutorial ini membantu Anda memulai
dengan dasar-dasar OOP dan memotivasi Anda untuk terus belajar topik OOP yang
lebih tinggi.