Web Cơ Bản

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

Cách thức hoạt động của hàm __construct()

- Hàm __construct() thường được khai báo bên trong lớp, khi ta tạo một đối tượng từ lớp đó thì hàm __construct() sẽ tự động được gọi đến.

- Khi bạn tạo một đối tượng, hàm __construct() sẽ tự động được gọi đến, nó sẽ hiển thị câu “Bạn vừa mới tạo một đối tượng”

<?php
	class Mobile{
		public $model;
		public $color;
		public $price;
		function __construct(){
			echo "Bạn vừa mới tạo một đối tượng";
		}
	}
	$nokia = new Mobile();
?>

- Bởi vì đặc tính của hàm __construct(), cho nên nó thường được sử dụng để thiết lập việc gán giá trị cho các “thuộc tính” của đối tượng thông qua việc tạo một đối tượng mới.

- Trong lớp Mobile bên dưới tôi có khai báo một hàm __construct(), hàm này dùng để thiết lập việc gán giá trị cho ba thuộc tính model, color, price thông qua việc tạo một đối tượng mới.

- Khi tạo một đối tượng, các bạn cần phải truyền giá trị cho các đối số của hàm __construct(), điển hình là giá trị thứ nhất Nokia 8.1 dùng để truyền cho đối số thứ nhất là input_model, lần lượt thứ hai, thứ ba.

<?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 get_model(){
			return $this->model;
		}
		function get_color(){
			return $this->color;
		}
		function get_price(){
			return $this->price;
		}
	}
	$nokia = new Mobile("Nokia 8.1", "Black", "5.000.000");
	echo "Model: " . $nokia->model . "<br>";
	echo "Màu sắc: " . $nokia->color . "<br>";
	echo "Giá tiền: " . $nokia->price;
?>

Ưu điểm của việc sử dụng hàm __construct()

- Sử dụng hàm __construct() sẽ giúp giảm thiểu việc viết mã lệnh, chúng ta không cần phải viết các hàm dùng để thiết lập giá trị cho thuộc tính, khi tạo đối tượng thì cũng không cần sử dụng các hàm đó để gán giá trị cho thuộc tính của đối tượng, điều đó khiến cho cấu trúc của chương trình rõ ràng hơn.

- Dưới đây là đoạn mã có ý nghĩa tương tự như ví dụ ở trên, nhưng đoạn mã này không dùng hàm __construct(), các bạn hãy so sánh nó với đoạn mã phía trên để thấy được ưu điểm của việc sử dụng hàm __construct().

<?php
	class Mobile{
		public $model;
		public $color;
		public $price;
		function set_model($input_model){
			$this->model = $input_model;
		}
		function set_color($input_color){
			$this->color = $input_color;
		}
		function set_price($input_price){
			$this->price = $input_price;
		}
		function get_model(){
			return $this->model;
		}
		function get_color(){
			return $this->color;
		}
		function get_price(){
			return $this->price;
		}
	}
	$nokia = new Mobile();
	$nokia->set_model("Nokia 8.1");
	$nokia->set_color("Black");
	$nokia->set_price("5.000.000");
	echo "Model: " . $nokia->model . "<br>";
	echo "Màu sắc: " . $nokia->color . "<br>";
	echo "Giá tiền: " . $nokia->price;
?>

Một số điều cần lưu ý khi sử dụng hàm __construct()

✅ Phía trước construct phải có hai dấu gạch dưới

- Sợ các bạn nhìn không rõ nên tôi nói thêm, phía trước construct phải có hai dấu gạch dưới _ _ c o n s t r u c t

✅ Số lượng đối số của hàm __construct()

- Số lượng đối số của hàm __construct() không nhất thiết phải bằng với số lượng thuộc tính.

- Ví dụ: Bên trong lớp Mobile có ba thuộc tính, trong khi hàm __construct() chỉ có hai đối số, nhưng điều đó vẫn không gây ra sai lầm gì.

class Mobile{
	public $model;
	public $color;
	public $price;
	function __construct($input_model, $input_price){
		$this->model = $input_model;
		$this->price = $input_price;
	}
}

✅ Số lượng giá trị truyền vào khi tạo đối tượng

- Khi tạo một đối tượng, số lượng giá trị truyền vào không được nhỏ hơn số lượng đối số của hàm __construct().

- Ví dụ: Hàm __construct() có ba đối số, nhưng khi tạo một đối tượng thì các bạn chỉ truyền có hai giá trị, như thế là sai.

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;
	}
}
$nokia = new Mobile("Nokia 8.1", "Black");