Appearance
Meeting 5
OOP (Object Oriented dengan PHP)
OOP diterapkan dengan membungkus atau mengelompokkan variable dan function, OOP memungkinkan kita untuk membuat kode yang lebih terstruktur, modular, dan mudah dipahami.

Kelebihan penerapan OOP detail
- Memudahkan pembacaan kode
- Membuat program lebih terstruktur
- Kode jadi lebih mudah dipelihara, dimodifikasi, dan di-debug jika terjadi bug
- Menghindari penulisan kode yang sama berulang kali
- Mempersingkat waktu pengembangan
- Memungkinkan pengembangan program dengan kode yang dapat digunakan kembali (reusable)
Class & Object
Class dapat didefinisikan sebagai sebuah bentuk dasar atau blueprint yang mendefinisikan variabel.
Object Sederhananya, sebuah obyek adalah kumpulan dari variabel dan fungsi yang dibungkus menjadi satu entitas. Entitas tersebut dapat berupa variabel biasa di sebut dengan attribute atau property. Sebuah obyek diciptakan melalui sebuah kelas atau dengan istilah instance of class.
php
<?php
# class inisiasi
class Product
{
# object / attribute
public string $name;
}
# create new class Product instance
$product = new Product();
$product->name = 'Handphone';
echo "Product name {$product->name}"; // Product name Handphone<?php
# class inisiasi
class Product
{
# object / attribute
public string $name;
}
# create new class Product instance
$product = new Product();
$product->name = 'Handphone';
echo "Product name {$product->name}"; // Product name HandphonePenjelasan Code
- membuat class dengan nama
Product - menginisialisasi attribut
$namepada objek baru dari classProductdengan nilaiHandphone. - mencetak isi object
$namepada classProduct
Method
Method pada dasarnya adalah function yang berada di dalam class. Seluruh fungsi dan sifat function bisa diterapkan ke dalam method, seperti argumen/parameter, mengembalikan nilai.
php
<?php
# class inisiasi
class Product
{
# object / attribute
public string $name;
public int $price;
# method printProduct()
public function printProduct()
{
echo "Product name {$product->name}";
}
# method getPrice()
public function getPrice(): int
{
return $this->price;
}
}
# create new class Product instance
$product = new Product();
$product->name = 'Handphone';
$product->price = 2000000;
$product->printProduct(); // Product name Handphone<?php
# class inisiasi
class Product
{
# object / attribute
public string $name;
public int $price;
# method printProduct()
public function printProduct()
{
echo "Product name {$product->name}";
}
# method getPrice()
public function getPrice(): int
{
return $this->price;
}
}
# create new class Product instance
$product = new Product();
$product->name = 'Handphone';
$product->price = 2000000;
$product->printProduct(); // Product name HandphonePenjelasan Code
- pada dasarnya method sama seperti function yang kita pelajari sebelumnya, namun
methodmerupakan fungsi dariclassyang kita buat. - terdapat 2 method pada class Product dengan fungsi yang berbeda-beda,
printProduct()untuk mencetak nama productgetPrice()untuk mengambil nilai dari object/attribute$price
Construct
Ketika kita membuat instance dari class, PHP akan otomatis mengeksekusi constructor method, pada kasus tertentu mungkin kita butuh menginisiasi logic tertentu sebelum membuat instance class baru.
php
<?php
# class inisiasi
class Product
{
# object / attribute
public string $name;
public int $price;
# constructor
public function __construct(string $name, int $price)
{
$this->name = $name;
$this->price = $price;
}
# method printProduct()
public function printProduct()
{
echo "Product name {$product->name}";
}
# method getPrice()
public function getPrice(): int
{
return $this->price;
}
}
# create new class Product instance
$product = new Product('Handphone', 2000000);
$product->printProduct(); // Product name Handphone<?php
# class inisiasi
class Product
{
# object / attribute
public string $name;
public int $price;
# constructor
public function __construct(string $name, int $price)
{
$this->name = $name;
$this->price = $price;
}
# method printProduct()
public function printProduct()
{
echo "Product name {$product->name}";
}
# method getPrice()
public function getPrice(): int
{
return $this->price;
}
}
# create new class Product instance
$product = new Product('Handphone', 2000000);
$product->printProduct(); // Product name HandphonePenjelasan Code
- cara menginisiasi instance dari
class Productsedikit berbeda disini karena kita menggunakanconstractor,$product = new Product('Handphone', 2000000);kita mengirim nilai nama dan harga melalu parameter dariclass. - dan kita bisa mengambil nilai parameter dari
classdengan method__construct, method ini akan selalu di eksekusi di awal pada saat kita membuat instance baru dariclass
Access Modifiers
Property dan Method memiliki access modifiers, kita dapat mengontrol di mana property dan method tersebut dapat diakses.
Detail Access Modifiers
publicproperty dan method dapat di akses dari mana saja, dan merupakan defaultaccess modifiers.protectedproperty dan method dapat diakses di dalamClassdan olehClassyang diturunkan dariClasstersebut.privateproperty dan method HANYA dapat diakses di dalamclass
php
<?php
# class inisiasi
class Product
{
# object / attribute
public string $name;
private int $price;
# constructor
public function __construct(string $name, int $price)
{
$this->name = $name;
$this->price = $price;
}
# method printProduct()
public function printProduct()
{
echo "Product name {$product->name}";
}
# method getPrice()
private function getPrice(): int
{
return $this->price;
}
}
# create new class Product instance
$product = new Product('Handphone', 2000000);
echo $product->name; // Handphone
echo $product->price; // ERROR
$product->printProduct(); // Product name Handphone
$product->getPrice(); // ERROR<?php
# class inisiasi
class Product
{
# object / attribute
public string $name;
private int $price;
# constructor
public function __construct(string $name, int $price)
{
$this->name = $name;
$this->price = $price;
}
# method printProduct()
public function printProduct()
{
echo "Product name {$product->name}";
}
# method getPrice()
private function getPrice(): int
{
return $this->price;
}
}
# create new class Product instance
$product = new Product('Handphone', 2000000);
echo $product->name; // Handphone
echo $product->price; // ERROR
$product->printProduct(); // Product name Handphone
$product->getPrice(); // ERRORPenjelasan Code
- kita mengganti access dari attribute
$pricemenjadiprivate - dan mengganti access dari method
getPrice()menjadiprivate - karena attribute
$pricemenggunakan private, attribute$pricetidak akan bisa di akses dari luarclass, sehingga pada penggalan kode iniecho $product->price;akan menghasilkan error - ini juga berlaku pada method
getPrice()tidak bisa di akses dari luarclass, di karenakan menggunakan accessprivate
Inheritance
Inheritance atau pewarisan sifat merupakan class turunan dari class yang lainnya. inheritance dibuat dengan membuat class baru dengan tujuan dihubungkan dengan class yang lain yang diinginkan. dengan tujuan untuk mendapatkan informasi atau data dari class yang dihubungkan tersebut.
php
<?php
# class inisiasi
class Product
{
# object / attribute
public string $name;
private int $price;
# constructor
public function __construct(string $name, int $price)
{
$this->name = $name;
$this->price = $price;
}
# method getPrice()
private function getPrice(): int
{
return $this->price;
}
}
class ElectronicProduct extends Product
{
public string $guaranty;
public int $discount;
public function __construct(string $name, int $price)
{
parent::__construct($name, $price);
$this->guaranty = 'Garansi resmi Electronic Toko Kami';
$this->discount = 50000; // default discount electronic product
}
# override getPrice Parent
# give discount for electronic product
public function getPrice(): int
{
return $this->price - $this->discount; // 2000000 - 50000
}
public function printGuaranty()
{
echo $this->guaranty;
}
}
# create new class Product instance
$product = new ElectronicProduct('Handphone', 2000000);
echo $product->getPrice(); // 1.950.000
$product->printGuaranty(); // Garansi resmi Electronic Toko Kami<?php
# class inisiasi
class Product
{
# object / attribute
public string $name;
private int $price;
# constructor
public function __construct(string $name, int $price)
{
$this->name = $name;
$this->price = $price;
}
# method getPrice()
private function getPrice(): int
{
return $this->price;
}
}
class ElectronicProduct extends Product
{
public string $guaranty;
public int $discount;
public function __construct(string $name, int $price)
{
parent::__construct($name, $price);
$this->guaranty = 'Garansi resmi Electronic Toko Kami';
$this->discount = 50000; // default discount electronic product
}
# override getPrice Parent
# give discount for electronic product
public function getPrice(): int
{
return $this->price - $this->discount; // 2000000 - 50000
}
public function printGuaranty()
{
echo $this->guaranty;
}
}
# create new class Product instance
$product = new ElectronicProduct('Handphone', 2000000);
echo $product->getPrice(); // 1.950.000
$product->printGuaranty(); // Garansi resmi Electronic Toko KamiPenjelasan Code
- membuat
classbaru dengan namaclassElectronicProduct, dan mewarisiclass Productsebagai parentclassdenganextends Product - method
getPrice()terdapat juga di bagian parentclass(Product), namun di karenakan methodgetPrice()terdapat juga di childclass(ElectronicProduct), methodgetPrice()pada parentclass(Product) akan di override. - child
class(ElectronicProduct) bisa menggunakan semua attribute dan method dari parentclass(Product)