Skip to content

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.

php illustration

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 Handphone
Penjelasan Code
  • membuat class dengan nama Product
  • menginisialisasi attribut $name pada objek baru dari class Product dengan nilai Handphone.
  • mencetak isi object $name pada class Product

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 Handphone
Penjelasan Code
  • pada dasarnya method sama seperti function yang kita pelajari sebelumnya, namun method merupakan fungsi dari class yang kita buat.
  • terdapat 2 method pada class Product dengan fungsi yang berbeda-beda,
    • printProduct() untuk mencetak nama product
    • getPrice() 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 Handphone
Penjelasan Code
  • cara menginisiasi instance dari class Product sedikit berbeda disini karena kita menggunakan constractor, $product = new Product('Handphone', 2000000); kita mengirim nilai nama dan harga melalu parameter dari class.
  • dan kita bisa mengambil nilai parameter dari class dengan method __construct, method ini akan selalu di eksekusi di awal pada saat kita membuat instance baru dari class

Access Modifiers

Property dan Method memiliki access modifiers, kita dapat mengontrol di mana property dan method tersebut dapat diakses.

Detail Access Modifiers
  • public property dan method dapat di akses dari mana saja, dan merupakan default access modifiers.
  • protected property dan method dapat diakses di dalam Class dan oleh Class yang diturunkan dari Class tersebut.
  • private property dan method HANYA dapat diakses di dalam class
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(); // ERROR
Penjelasan Code
  • kita mengganti access dari attribute $price menjadi private
  • dan mengganti access dari method getPrice() menjadi private
  • karena attribute $price menggunakan private, attribute $price tidak akan bisa di akses dari luar class, sehingga pada penggalan kode ini echo $product->price; akan menghasilkan error
  • ini juga berlaku pada method getPrice() tidak bisa di akses dari luar class, di karenakan menggunakan access private

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 Kami
Penjelasan Code
  • membuat class baru dengan nama class ElectronicProduct, dan mewarisi class Product sebagai parent class dengan extends Product
  • method getPrice() terdapat juga di bagian parent class (Product), namun di karenakan method getPrice() terdapat juga di child class (ElectronicProduct), method getPrice() pada parent class (Product) akan di override.
  • child class (ElectronicProduct) bisa menggunakan semua attribute dan method dari parent class (Product)