Hướng dẫn dùng destruct trong PHP

Chức năng, cách sử dụng hàm __destruct() trong PHP

- Trong lập trình hướng đối tượng, hàm __destruct() thường được khai báo bên trong một lớp, PHP sẽ tự động gọi hàm này ở cuối tập lệnh.

- Khi bạn tạo một đối tượng, hàm __destruct() sẽ tự động được gọi ở cuối tập lệnh.

<?php
	class Mobile{
		public $model;
		function __construct($input_model){
			$this->model = $input_model;
		}
		function __destruct(){
			echo "Model: " . $this->model;
		}
	}
	$samsung = new Mobile("Samsung Galaxy 3");
	echo "------ Dưới đây là thông tin sản phẩm ------ <br>";
?>

- Dưới đây là một ví dụ khác.

<?php
	class Mobile{
		public $model;
		public $color;
		public $price;
		function __construct($input_model, $input_color, $input_price){
			$this->model = $input_model;
			$this->color = $input_color;
			$this->price = $input_price;
		}
		function __destruct(){
			echo "Model {$this->model} <br> Màu sắc: {$this->color} <br> Giá sản phẩm: {$this->price}";
		}
	}
	$samsung = new Mobile("Samsung Galaxy 3", "Blue", "3.500.000");
	echo "------ Dưới đây là thông tin sản phẩm ------ <br>";
?>

Chức năng, cách sử dụng hàm __destruct() trong PHP

- Trong lập trình hướng đối tượng, hàm __destruct() thường được khai báo bên trong một lớp, PHP sẽ tự động gọi hàm này ở cuối tập lệnh.

- Khi bạn tạo một đối tượng, hàm __destruct() sẽ tự động được gọi ở cuối tập lệnh.

<?php
	class Mobile{
		public $model;
		function __construct($input_model){
			$this->model = $input_model;
		}
		function __destruct(){
			echo "Model: " . $this->model;
		}
	}
	$samsung = new Mobile("Samsung Galaxy 3");
	echo "------ Dưới đây là thông tin sản phẩm ------ <br>";
?>

- Dưới đây là một ví dụ khác.

<?php
	class Mobile{
		public $model;
		public $color;
		public $price;
		function __construct($input_model, $input_color, $input_price){
			$this->model = $input_model;
			$this->color = $input_color;
			$this->price = $input_price;
		}
		function __destruct(){
			echo "Model {$this->model} <br> Màu sắc: {$this->color} <br> Giá sản phẩm: {$this->price}";
		}
	}
	$samsung = new Mobile("Samsung Galaxy 3", "Blue", "3.500.000");
	echo "------ Dưới đây là thông tin sản phẩm ------ <br>";
?>

Trong bài này, chúng ta sẽ tìm hiểu về constructor và destructor của class trong PHP. Để học tốt bài này, các bạn cần đọc lại bài Cài đặt môi trường lập trình Web PHP với XAMPP để biết cách chạy ứng dụng web PHP với XAMPP.

Nội dung chính

  • 1.1. Hàm khởi tạo mặc định (default constructor)
  • 1.2. Hàm khởi tạo có tham số (parameterized constructor)
  • 1.3. Hàm khởi tạo sao chép (copy constructor)
  • 2. Hàm hủy (destructor) của class trong PHP

Hàm khởi tạo (constructor) luôn luôn được gọi khi một đối tượng của một lớp được tạo ra. Hàm khởi tạo được sử dụng để khởi tạo giá trị cho các thuộc tính của đối tượng hoặc thực hiện một số thao tác khi đối tượng đang được tạo ra.

Trong PHP, hàm __construct() là hàm khởi tạo (constructor) của class trong PHP. Có 3 dạng hàm khởi tạo là:

    • Hàm khởi tạo mặc định (default constructor)
    • Hàm khởi tạo có tham số (parameterized constructor)
    • Hàm khởi tạo sao chép (copy constructor)

1.1. Hàm khởi tạo mặc định (default constructor)

Nếu trong một class không định nghĩa hàm __construct() thì PHP sẽ tự động tạo ra một hàm khởi tạo mặc định. Hàm khởi tạo mặc định không có tham số và không có dòng code nào trong thân hàm. Khi gọi hàm khởi tạo mặc định để tạo một đối tượng thì các thuộc tính của đối tượng sẽ nhận giá trị mặc định.

<?php
class Cat {
    # Properties of Cat class
    public $name;
    public $color;
    # getter and setter methods
    function set_name($name) {
        $this->name = $name;
    }
    function get_name() {
        return $this->name;
    }
    function set_color($color) {
        $this->color = $color;
    }
    function get_color() {
        return $this->color;
    }
    # Methods of Cat class
    function info(){
        return $this->name." cat has ".$this->color." color";
    }
    function sleep(){
        return $this->name." cat takes a nap.";
    }
}
$tom = new Cat();
echo $tom->info();
?>
Kết quả
cat has color

Chúng ta có thể định nghĩa hàm __construct() không có tham số trong class trong PHP. Lúc này, hàm khởi tạo này có chức năng giống như hàm khởi tạo mặc định nhưng có thể định nghĩa các dòng code trong thân hàm để thực thi lúc tạo đối tượng.

<?php
class Cat {
    # Properties of Cat class
    public $name;
    public $color;
    function __construct() {
        echo "This is constructor function<br>";
    }
    # getter and setter methods
    function set_name($name) {
        $this->name = $name;
    }
    function get_name() {
        return $this->name;
    }
    function set_color($color) {
        $this->color = $color;
    }
    function get_color() {
        return $this->color;
    }
    # Methods of Cat class
    function info(){
        return $this->name." cat has ".$this->color." color";
    }
    function sleep(){
        return $this->name." cat takes a nap.";
    }
}
$tom = new Cat();
echo $tom->info();
?>

Kết quả
This is constructor function
cat has color

1.2. Hàm khởi tạo có tham số (parameterized constructor)

Chúng ta có thể định nghĩa hàm __construct() có 1 hoặc nhiều tham số. Hàm khởi tạo có tham số thường được sử dụng để khởi tạo các giá trị cho các thuộc tính của đối tượng.

<?php
class Cat {
    # Properties of Cat class
    public $name;
    public $color;
    // parameterized constructor
    function __construct($name, $color) {
        $this->name = $name;
        $this->color = $color;
    }
    # getter and setter methods
    function set_name($name) {
        $this->name = $name;
    }
    function get_name() {
        return $this->name;
    }
    function set_color($color) {
        $this->color = $color;
    }
    function get_color() {
        return $this->color;
    }
    # Methods of Cat class
    function info(){
        return $this->name." cat has ".$this->color." color";
    }
    function sleep(){
        return $this->name." cat takes a nap.";
    }
}
$tom = new Cat("Tom", "grey and white");
echo $tom->info();
?>
Kết quả
Tom cat has grey and white color

Lưu ý: Trong PHP, chỉ được định nghĩa một hàm khởi tạo __construct() trong class.

1.3. Hàm khởi tạo sao chép (copy constructor)

Hàm khởi tạo sao chép được sử dụng để tạo ra một bản sao chép (copy) của một đối tượng đã có. Hàm này lấy địa chỉ của một đối tượng khác làm tham số. Trong PHP, hàm này bản chất là một hàm sao chép thuộc tính của đối tượng này cho đối tượng khác.

<?php
class Cat {
    # Properties of Cat class
    public $name;
    public $color;
    # getter and setter methods
    function set_name($name) {
        $this->name = $name;
    }
    function get_name() {
        return $this->name;
    }
    function set_color($color) {
        $this->color = $color;
    }
    function get_color() {
        return $this->color;
    }
    # Methods of Cat class
    function info() {
        return $this->name." cat has ".$this->color." color";
    }
    function sleep() {
        return $this->name." cat takes a nap.";
    }
    // copy constructor
    public function copyCon(Cat $c) {
        $this->name = $c->name;
        $this->color = $c->color;
    }
}
$tom = new Cat();
$tom->set_name("Tom");
$tom->set_color("grey and white");
echo $tom->info()."<br>";
$tom2 = new Cat();
$tom2->copyCon($tom);
echo "Tom2: ";
echo $tom2->info();
?>
Kết quả
Tom cat has grey and white color
Tom2: Tom cat has grey and white color

2. Hàm hủy (destructor) của class trong PHP

Hàm hủy (destructor) được gọi khi đối tượng bị hủy hoặc PHP script bị dừng hoặc thoát. Trong PHP, hàm __destruct() là hàm hủy (destructor) của class trong PHP.

<?php
class Cat {
    # Properties of Cat class
    public $name;
    public $color;
    // parameterized constructor
    function __construct($name, $color) {
        $this->name = $name;
        $this->color = $color;
    }
    # getter and setter methods
    function set_name($name) {
        $this->name = $name;
    }
    function get_name() {
        return $this->name;
    }
    function set_color($color) {
        $this->color = $color;
    }
    function get_color() {
        return $this->color;
    }
    # Methods of Cat class
    function info() {
        return $this->name." cat has ".$this->color." color";
    }
    function sleep() {
        return $this->name." cat takes a nap.";
    }
    // destructor function
    function __destruct() {
        echo "The cat is {$this->name} and the color is {$this->color}.";
    }
}
$tom = new Cat("Tom", "grey and white");
?>
Kết quả
The cat is Tom and the color is grey and white.

Hàm hủy (destructor) trong PHP thường được dùng để giải phóng bộ nhớ của đối tượng khi không sử dụng nữa.

  • Java collections framework: Set interface và lớp HashSet
  • Lớp BufferedReader và BufferedWriter trong Java
  • Chuyển đổi (convert) dữ liệu JSON sang dữ liệu XML trong Python
  • Cấu trúc dữ liệu Set trong Python
  • Cấu trúc vòng lặp for và foreach trong PHP