PHP - Konstruktor dan Destruktor

Selamat datang dalam perjalanan kita ke dunia pemrograman PHP! Hari ini, kita akan mendalami dua fungsi khusus yang dapat dimiliki setiap kelas PHP: __construct() dan __destruct(). Kedua fungsi ini dikenal sebagai konstruktor dan destruktur, masing-masing, dan mereka memainkan peran penting dalam mengelola siklus hidup objek. Mari kita mulai!

PHP - Constructor and Destructor

Fungsi __construct()

Fungsi __construct() adalah metode khusus yang secara otomatis dipanggil saat objek diciptakan dari kelas. Itu seperti pesta welcome untuk objek baru Anda! Anda dapat menggunakannya untuk menginisialisasi properti atau melakukan tugas-tugas pengaturan yang diperlukan oleh objek Anda.

Contoh 1: Konstruktor Dasar

class Fruit {
public $name;

public function __construct($fruitName) {
$this->name = $fruitName;
}
}

$apple = new Fruit("Apple");
echo $apple->name; // Output: Apple

Dalam contoh ini, kita mendefinisikan kelas Fruit dengan konstruktor yang mengambil satu parameter, $fruitName. Saat kita menciptakan objek Fruit baru, kita memberikan "Apple" sebagai argumen, yang mengatur properti $name objek menjadi "Apple".

Konstruktor Parameterized

Konstruktor parameterized memungkinkan Anda mengirimkan argumen ke konstruktor, membuatnya lebih fleksibel. Dengan cara ini, Anda dapat menciptakan objek dengan keadaan awal yang berbeda berdasarkan parameter yang diberikan.

Contoh 2: Konstruktor Parameterized

class Car {
public $make;
public $model;
public $year;

public function __construct($make, $model, $year) {
$this->make = $make;
$this->model = $model;
$this->year = $year;
}
}

$myCar = new Car("Toyota", "Camry", 2020);
echo $myCar->make; // Output: Toyota
echo $myCar->model; // Output: Camry
echo $myCar->year; // Output: 2020

Dalam contoh ini, kita telah memperluas kelas Car untuk mencakup konstruktor parameterized yang menerima tiga parameter: $make, $model, dan $year. Saat kita menciptakan objek Car baru, kita dapat menentukan nilai ini, memungkinkan kita menciptakan mobil dengan merk, model, dan tahun yang berbeda.

Overloading Konstruktor

Overloading konstruktor tidak didukung secara langsung dalam PHP, tetapi Anda dapat mencapai fungsi yang serupa menggunakan parameter opsional atau nilai default. Hal ini memungkinkan Anda menciptakan beberapa konstruktor dengan jumlah atau jenis parameter yang berbeda.

Contoh 3: Overloading Konstruktor (Menggunakan Parameter Opsional)

class Book {
public $title;
public $author;
public $pages;

public function __construct($title, $author = null, $pages = null) {
$this->title = $title;
$this->author = $author;
$this->pages = $pages;
}
}

$book1 = new Book("Harry Potter");
$book2 = new Book("Lord of the Rings", "J.R.R. Tolkien");
$book3 = new Book("The Great Gatsby", "F. Scott Fitzgerald", 180);

Dalam contoh ini, kita telah menambahkan parameter opsional ke konstruktor Book. Saat menciptakan objek Book baru, Anda dapat memberikan hanya judul, atau juga penulis dan jumlah halaman. Jika Anda tidak memberikan parameter opsional ini, nilai default mereka adalah null.

Declarasi Tipe dalam Konstruktor

Declarasi tipe dalam konstruktor PHP tidak diperlukan, karena PHP adalah bahasa yang lemah tipe. Namun, jika Anda ingin menegakkan pemeriksaan tipe, Anda dapat menggunakan fungsi assert() dalam konstruktor Anda.

Contoh 4: Declarasi Tipe dalam Konstruktor (Menggunakan assert())

class Student {
public $name;
public $age;

public function __construct($name, $age) {
assert(is_string($name), "Name must be a string");
assert(is_int($age), "Age must be an integer");

$this->name = $name;
$this->age = $age;
}
}

$student = new Student("Alice", 25); // No error
$student2 = new Student(123, "Bob"); // Error: Name must be a string, Age must be an integer

Dalam contoh ini, kita menambahkan pemeriksaan tipe menggunakan assert() dalam konstruktor Student. Jika argumen yang diberikan tidak cocok dengan tipe yang diharapkan, kesalahan akan ditampilkan. Catatan bahwa ini bukan praktik umum dalam PHP, karena itu dapat membuat kode kurang fleksibel dan sulit dipelihara.

Fungsi __destruct()

Fungsi __destruct() adalah metode khusus yang secara otomatis dipanggil saat objek dihancurkan atau keluar dari rentang. Itu seperti pesta pergaulan untuk objek Anda! Anda dapat menggunakannya untuk membersihkan sumber daya, menutup koneksi, atau melakukan tugas-tugas pembersihan lain sebelum objek dihapus dari memori.

Contoh 5: Destruktur Dasar

class FileHandler {
private $file;

public function __construct($filename) {
$this->file = fopen($filename, 'r');
}

public function __destruct() {
fclose($this->file);
}
}

$fileHandler = new FileHandler('example.txt'); // Opens the file
// ... Do some operations with the file ...
// File is automatically closed when $fileHandler goes out of scope

Dalam contoh ini, kita mendefinisikan kelas FileHandler yang membuka file dalam konstruktor dan menutupnya dalam destruktur. Saat kita menciptakan objek FileHandler baru dan ia keluar dari rentang (misalnya, di akhir skrip atau saat tidak lagi direferensikan), destruktur secara otomatis dipanggil, menutup file.

Itu saja untuk hari ini! Kita telah meliputi dasar-dasar konstruktor dan destruktur dalam PHP. Ingat, metode khusus ini adalah alat kuat yang memungkinkan Anda mengontrol siklus hidup objek dan memastikan manajemen sumber daya yang tepat. Selamat coding!

Credits: Image by storyset