PHP Lifecycle

Constructor & Destructor

Oleh: Ahmad Muyassar, S.Kom.,M.Cs

Cycle of Life

01. Konsep Siklus Hidup
02. Magic Method __construct()
03. Parameter Constructor
04. Magic Method __destruct()
05. Studi Kasus Koneksi DB
01

Siklus Hidup

Lahir, Hidup, Mati

Objek itu Hidup

Seperti makhluk hidup, objek dalam pemrograman memiliki siklus:

  1. Creation (Lahir): Saat new dipanggil.
  2. Utilization (Hidup): Saat method/property digunakan.
  3. Destruction (Mati): Saat skrip selesai atau objek dihapus.

Magic Methods

PHP menyediakan method khusus yang diawali dengan double underscore __.

Mereka dipanggil secara otomatis oleh PHP pada momen tertentu.

Dua Momen Kunci

__construct()

Dipanggil SAAT objek dibuat.

Object Life

Digunakan...

__destruct()

Dipanggil SAAT objek dihancurkan.

02

__construct()

Awal Kehidupan

Apa itu Constructor?

Method khusus yang otomatis dijalankan tepat setelah objek dibuat menggunakan new.

Biasanya digunakan untuk inisialisasi data.

Syntax Dasar


class Tanaman {
    public function __construct() {
        echo "Tanaman baru telah ditanam!";
    }
}

$bunga = new Tanaman(); 
// Output: Tanaman baru telah ditanam!
            

Kenapa Perlu Constructor?

Bayangkan Anda membuat objek User.

Objek User TIDAK VALID jika tidak punya nama dan email.

Constructor memaksa kita mengisi data tersebut saat lahir.

03

Parameter

Bekal Lahir

Mengirim Data saat Lahir

Kita bisa menambahkan parameter pada __construct.


class User {
    public $nama;

    public function __construct($namaBaru) {
        $this->nama = $namaBaru;
    }
}
            

Instansiasi dengan Parameter

Saat membuat objek, kita WAJIB mengirim argumen.


$user = new User("Ahmad");
echo $user->nama; // Ahmad

// $user = new User(); // ERROR! Missing argument
            

Constructor Property Promotion (PHP 8.0+)

Fitur canggih untuk menyingkat kode.

Cara Lama


class User {
    public $nama;
    public function __construct($nama) {
        $this->nama = $nama;
    }
}
                    

Cara Baru


class User {
    public function __construct(
        public string $nama
    ) {}
}
                    

Default Value

Parameter constructor juga bisa punya nilai default.


class Kucing {
    public function __construct($warna = "Oren") {
        echo "Kucing warna $warna";
    }
}

new Kucing(); // Kucing warna Oren
new Kucing("Hitam"); // Kucing warna Hitam
            
04

__destruct()

Akhir Kehidupan

Apa itu Destructor?

Kebalikan dari Constructor.

Dijalankan otomatis saat objek dihapus dari memori atau saat skrip PHP selesai dieksekusi.

Kegunaan Destructor

Syntax Dasar


class FileHandler {
    public function __destruct() {
        echo "File ditutup. Memori dibersihkan.";
    }
}
            

Kapan Destructor Jalan?


$obj = new FileHandler();
echo "Sedang bekerja...";
// ... kode lain ...
// Skrip selesai -> Destructor jalan otomatis
            

Output: Sedang bekerja... File ditutup. Memori dibersihkan.

Menghapus Manual

Kita bisa memicu destructor lebih awal dengan unset().


$obj = new FileHandler();
unset($obj); // Destructor jalan SEKARANG
echo "Selesai.";
            
05

Studi Kasus

Koneksi Database

Skenario

Kita ingin membuat class Database.

Saat dibuat, dia konek ke DB.

Saat selesai, dia putus koneksi.

Implementasi


class Database {
    public $koneksi;

    public function __construct($host, $user) {
        $this->koneksi = "Connect to $host as $user";
        echo "Koneksi dibuka.
"; } public function query($sql) { echo "Menjalankan: $sql
"; } public function __destruct() { echo "Koneksi ditutup.
"; } }

Eksekusi


$db = new Database("localhost", "root");
$db->query("SELECT * FROM users");
            
Koneksi dibuka.
Menjalankan: SELECT * FROM users
Koneksi ditutup.

Constructor Overloading?

PHP TIDAK mendukung multiple constructor (Overloading) seperti Java/C++.

Satu class hanya boleh punya SATU __construct.

Solusi Overloading

Gunakan Static Factory Method jika butuh cara pembuatan yang berbeda.


class User {
    public static function fromJson($json) { ... }
    public static function fromXml($xml) { ... }
}
            

Parent Constructor

Jika Child Class punya constructor, constructor Parent TIDAK jalan otomatis.

Harus panggil parent::__construct().

Contoh Parent Construct


class Anak extends Ayah {
    public function __construct() {
        parent::__construct(); // Panggil ayah dulu
        echo "Anak lahir.";
    }
}
            

Visibility Constructor

Constructor bisa dibuat private.

Ini digunakan pada Design Pattern Singleton (hanya boleh ada 1 objek).

Singleton Pattern


class Koneksi {
    private static $instance;
    private function __construct() {} // Gak bisa di-new dari luar

    public static function get() {
        if (!self::$instance) self::$instance = new self();
        return self::$instance;
    }
}
            

Destructor & Exception

Hati-hati melempar Exception di dalam __destruct.

Bisa menyebabkan Fatal Error jika terjadi saat shutdown sequence.

Urutan Destructor

Objek dihancurkan dengan urutan LIFO (Last In First Out) jika saling berkaitan, tapi tidak selalu dijamin.

Property Initialization

Sebaiknya inisialisasi semua property di Constructor agar objek selalu dalam state yang valid (konsisten).

Dependency Injection

Constructor adalah tempat terbaik untuk menyuntikkan ketergantungan (Dependency Injection).


class OrderService {
    public function __construct(
        private PaymentGateway $payment
    ) {}
}
            

Return Value

Constructor tidak boleh mengembalikan nilai (return value).

Dia selalu mengembalikan instance objek itu sendiri secara implisit.

Destructor pada Child

Sama seperti constructor, destructor Child tidak otomatis memanggil destructor Parent.

Gunakan parent::__destruct() jika perlu.

Memory Leak

PHP punya Garbage Collector (GC). Tapi Circular Reference (A nyimpen B, B nyimpen A) bisa bikin memori bocor jika tidak ditangani.

Kesimpulan

Terima Kasih

Siklus Selesai.

1 / 40