Anda di halaman 1dari 13

PHP Berorientasi Objek

dengan Kelas dan Objek


Pada artikel ini, kita akan mengeksplorasi dasar-dasar pemrograman berorientasi objek
dalam PHP. Kita akan mulai dengan pengantar kelas (class) dan objek(object), dan kita
akan membahas beberapa konsep canggih seperti pewarisan (inheritance) dan
polimorfisme di bagian akhir artikel ini.

Apa itu Pemrograman Berorientasi Objek


(OOP)?
Pemrograman berorientasi objek, yang biasa disebut sebagai OOP, adalah pendekatan
yang membantu Anda mengembangkan aplikasi yang kompleks dengan cara yang
mudah dipelihara dan terukur dalam jangka panjang. Dalam dunia OOP, entitas dunia
nyata seperti Person , Car , atau Animal diperlakukan sebagai object. Dalam
pemrograman berorientasi objek, Anda berinteraksi dengan aplikasi dengan
menggunakan objek. Ini berbeda dengan pemrograman prosedural, terutama dimana
Anda berinteraksi dengan fungsi dan variabel global.

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.

Class mendefinisikan properti. Misalnya, untuk class Person, Kami mungkin


memiliki name , age , dan phoneNumber . Kemudian setiap object dari Person akan
memiliki nilai sendiri untuk properti tersebut.

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.

Apa itu Class pada PHP?


Class adalah template yang mewakili entitas dunia nyata, dan mendefinisikan properti
dan method entitas. Pada bagian ini, kita akan membahas tipikal anatomi dasar class
pada PHP.

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;

8 public function __construct($first_name, $last_name, $age)

9 {

10 $this->first_name = $first_name;

11 $this->last_name = $last_name;

12 $this->age = $age;

13 }

14

15 public function getFirstName()

16 {

17 return $this->first_name;

18 }

19

20 public function getLastName()

21 {

22 return $this->last_name;

23 }

24

25 public function getAge()

26 {

27 return $this->age;

28 }

29 }

30 ?>

Pernyataan class Employee pada baris pertama mendefinisikan class Employee .


Kemudian, kita akan mendeklarasikan properti, konstruktor, dan method class lainnya.
Properti Class pada PHP
Anda bisa menganggap properti class sebagai variabel yang digunakan untuk
menyimpan informasi tentang object. Dalam contoh di atas, kami telah menetapkan tiga
properti — first_name , last_name , dan age . Dalam kebanyakan kasus, properti class
diakses melalui object yang dipakai.

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.

Konstruktor untuk Kelas PHP


Konstruktor adalah method class khusus yang dipanggil secara otomatis ketika Anda
instantiate sebuah object. Kami akan melihat cara membuat instance object di beberapa
bagian berikutnya, tetapi untuk sekarang Anda hanya perlu tahu bahwa konstruktor
digunakan untuk menginisialisasi properti object ketika object sedang dibuat.

Anda dapat mendefinisikan konstruktor dengan mendefinisikan method __construct .

Method untuk Class PHP


Kita dapat menganggap method class sebagai fungsi yang melakukan tindakan spesifik
yang terkait dengan object. Dalam kebanyakan kasus, mereka digunakan untuk
mengakses dan memanipulasi properti object dan melakukan operasi terkait.

Dalam contoh di atas, kami telah mendefinisikan method getLastName , yang


mengembalikan nama belakang yang dikaitkan dengan object.

Jadi itu adalah pengantar singkat tentang struktur class pada PHP. Di bagian selanjutnya,
kita akan melihat cara membuat instance object dari class Employee .

Apakah object dalam PHP?


Pada bagian sebelumnya, kita membahas struktur dasar sebuah class di PHP. Sekarang,
ketika Anda ingin menggunakan class, Anda harus melakukan instantiate, dan hasil
akhirnya adalah sebuah object. Jadi kita bisa menganggap class sebagai cetak biru, dan
sebuah object adalah hal aktual yang dapat Anda kerjakan.

Dalam konteks class Employee yang baru saja kita buat di bagian sebelumnya, mari kita
lihat bagaimana membuat instance object dari class tersebut.
1 <?php

2 $objEmployee = new Employee('Bob', 'Smith', 30);

4 echo $objEmployee->getFirstName(); // print 'Bob'

5 echo $objEmployee->getLastName(); // prints 'Smith'

6 echo $objEmployee->getAge(); // prints '30'

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

2 $objEmployeeOne = new Employee('Bob', 'Smith', 30);

4 echo $objEmployeeOne->getFirstName(); // prints 'Bob'

5 echo $objEmployeeOne->getLastName(); // prints 'Smith'

6 echo $objEmployeeOne->getAge(); // prints '30'

8 $objEmployeeTwo = new Employee('John', 'Smith', 34);

10 echo $objEmployeeTwo->getFirstName(); // prints 'John'

11 echo $objEmployeeTwo->getLastName(); // prints 'Smith'

12 echo $objEmployeeTwo->getAge(); // prints '34'

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.

Mari kita lihat contoh untuk memahami tingkat akses public.

1 <?php

2 class Person

3 {

4 public $name;

6 public function getName()

7 {

8 return $this->name;

9 }

10 }

11

12 $person = new Person();

13 $person->name = 'Bob Smith';

14 echo $person->getName(); // prints 'Bob Smith'

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

11 public function setName($name)

12 {

13 $this->name = $name;

14 }

15 }

16

17 $person = new Person();

18 $person->name = 'Bob Smith'; // Throws an error

19 $person->setName('Bob Smith');

20 echo $person->getName(); // prints '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).

Dalam contoh di atas, class Person adalah parent class, dan


class Employee memperluas (extend) atau mewarisi class Person dan disebut child class.

Mari kita coba melalui contoh dunia nyata untuk memahami cara kerjanya.

1 <?php

2 class Person

3 {

4 protected $name;

5 protected $age;

7 public function getName()

8 {

9 return $this->name;

10 }

11

12 public function setName($name)

13 {

14 $this->name = $name;
15 }

16

17 private function callToPrivateNameAndAge()

18 {

19 return "{$this->name} is {$this->age} years old.";

20 }

21

22 protected function callToProtectedNameAndAge()

23 {

24 return "{$this->name} is {$this->age} years old.";

25 }

26 }

27

28 class Employee extends Person

29 {

30 private $designation;

31 private $salary;

32

33 public function getAge()

34 {

35 return $this->age;

36 }

37

38 public function setAge($age)

39 {

40 $this->age = $age;

41 }

42

43 public function getDesignation()

44 {

45 return $this->designation;

46 }

47
48 public function setDesignation($designation)

49 {

50 $this->designation = $designation;

51 }

52

53 public function getSalary()

54 {

55 return $this->salary;

56 }

57

58 public function setSalary($salary)

59 {

60 $this->salary = $salary;

61 }

62

63 public function getNameAndAge()

64 {

65 return $this->callToProtectedNameAndAge();

66 }

67 }

68

69 $employee = new Employee();

70

71 $employee->setName('Bob Smith');

72 $employee->setAge(30);

73 $employee->setDesignation('Software Engineer');

74 $employee->setSalary('30K');

75

76 echo $employee->getName(); // prints 'Bob Smith'

77 echo $employee->getAge(); // prints '30'

78 echo $employee->getDesignation(); // prints 'Software Engineer'

79 echo $employee->getSalary(); // prints '30K'

80 echo $employee->getNameAndAge(); // prints 'Bob Smith is 30 years old.'


81 echo $employee->callToPrivateNameAndAge(); // produces 'Fatal Error'

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

Dalam contoh di atas, objek $employee dapat mengakses


method getName dan setName yang didefinisikan dalam class Person karena mereka
dinyatakan sebagai public.

Selanjutnya, kami telah mengakses


method callToProtectedNameAndAge menggunakan method getNameAndAge yang
didefinisikan dalam class Employee , karena dinyatakan sebagai protected. Akhirnya,
object $employee tidak dapat mengakses method callToPrivateNameAndAge dari
class Person karena dideklarasikan 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 {

4 public function formatMessage($message)


5 {

6 return printf("<i>%s</i>", $message);

7 }

8 }

10 class BoldMessage extends Message

11 {

12 public function formatMessage($message)

13 {

14 return printf("<b>%s</b>", $message);

15 }

16 }

17

18 $message = new Message();

19 $message->formatMessage('Hello World'); // prints '<i>Hello World</i>'

20

21 $message = new BoldMessage();

22 $message->formatMessage('Hello World'); // prints '<b>Hello World</b>'

23 ?>

Seperti yang Anda lihat, kami telah mengubah perilaku dari


method formatMessage dengan melakukan override pada class BoldMessage . Yang
penting adalah bahwa pesan diformat berbeda berdasarkan jenis object, apakah itu
turunan dari parent class atau child class.

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

Anda mungkin juga menyukai