Trong lập trình hướng đối tượng (OOP), constructor (phương thức khởi tạo) là một khái niệm rất quan trọng. Constructor là một phương thức đặc biệt được gọi tự động khi một đối tượng của một class được tạo ra. Nó thường đượ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 bất kỳ thiết lập ban đầu nào cần thiết khi đối tượng bắt đầu tồn tại.
Bài viết này sẽ giúp bạn hiểu rõ hơn về constructor trong PHP và cách sử dụng nó một cách hiệu quả.
1. Constructor là gì?
Constructor là một phương thức đặc biệt với tên cố định là __construct(). Phương thức này sẽ được gọi tự động khi bạn sử dụng từ khóa new để tạo ra một đối tượng từ một class. Bên trong constructor, bạn có thể đặt giá trị ban đầu cho các thuộc tính của đối tượng hoặc thực hiện các thao tác thiết lập khác.
Cú pháp của Constructor
class ClassName {
public function __construct() {
// Các câu lệnh khởi tạo
}
}Khi một đối tượng được tạo từ class đó, PHP sẽ tự động gọi phương thức __construct() mà không cần bạn phải gọi nó thủ công.
2. Ví dụ về Constructor
Trong ví dụ dưới đây, chúng ta sẽ tạo một class Car có constructor để thiết lập giá trị cho thuộc tính color của đối tượng.
class Car {
public $color;
// Constructor
public function __construct($color) {
$this->color = $color;
}
public function getColor() {
return $this->color;
}
}
// Tạo một đối tượng từ class Car
$myCar = new Car("Red");
echo $myCar->getColor(); // Output: RedGiải thích:
- Khi bạn tạo đối tượng
$myCarvới từ khóanew Car("Red"), PHP sẽ tự động gọi phương thức__construct()với tham số"Red". - Constructor sẽ gán giá trị
"Red"cho thuộc tính$colorcủa đối tượng$myCar. - Sau đó, khi gọi phương thức
getColor(), bạn sẽ nhận được kết quả là"Red".
3. Constructor với nhiều tham số
Constructor có thể chấp nhận nhiều tham số để khởi tạo giá trị cho nhiều thuộc tính cùng một lúc. Hãy xem ví dụ sau với class Car có thêm thuộc tính brand (hãng xe):
class Car {
public $color;
public $brand;
// Constructor với nhiều tham số
public function __construct($color, $brand) {
$this->color = $color;
$this->brand = $brand;
}
public function getCarInfo() {
return "This car is a " . $this->color . " " . $this->brand;
}
}
// Tạo một đối tượng từ class Car
$myCar = new Car("Blue", "Toyota");
echo $myCar->getCarInfo(); // Output: This car is a Blue ToyotaGiải thích:
- Constructor nhận hai tham số
$colorvà$brandđể khởi tạo các thuộc tính tương ứng của đối tượng. - Khi tạo đối tượng
$myCarvới từ khóanew Car("Blue", "Toyota"), giá trị"Blue"được gán cho thuộc tính$colorvà"Toyota"được gán cho thuộc tính$brand. - Phương thức
getCarInfo()sau đó trả về thông tin đầy đủ của xe dựa trên các thuộc tính đã được khởi tạo.
4. Constructor mặc định
Nếu bạn không khai báo constructor cho một class, PHP sẽ tự động cung cấp một constructor mặc định. Constructor mặc định này không làm gì cả, nhưng nó vẫn sẽ được gọi khi một đối tượng được tạo.
Ví dụ:
class Car {
public $color = "White";
}
$myCar = new Car();
echo $myCar->color; // Output: WhiteTrong ví dụ trên, PHP đã sử dụng constructor mặc định vì không có __construct() nào được khai báo trong class Car.
5. Constructor với giá trị mặc định cho tham số
Bạn có thể gán giá trị mặc định cho các tham số của constructor. Điều này cho phép bạn tạo đối tượng mà không cần truyền đủ tất cả các tham số.
class Car {
public $color;
public $brand;
// Constructor với giá trị mặc định
public function __construct($color = "White", $brand = "Unknown") {
$this->color = $color;
$this->brand = $brand;
}
public function getCarInfo() {
return "This car is a " . $this->color . " " . $this->brand;
}
}
// Tạo đối tượng với giá trị mặc định
$myCar = new Car();
echo $myCar->getCarInfo(); // Output: This car is a White UnknownGiải thích:
- Constructor nhận hai tham số
$colorvà$brandvới các giá trị mặc định lần lượt là"White"và"Unknown". - Nếu bạn không cung cấp bất kỳ giá trị nào khi tạo đối tượng (như trong ví dụ trên), các giá trị mặc định sẽ được sử dụng.
6. Constructor kế thừa trong class con
Trong PHP, nếu một class con kế thừa từ class cha và không khai báo constructor riêng, nó sẽ tự động sử dụng constructor của class cha. Tuy nhiên, nếu class con có constructor riêng, constructor của class cha sẽ không tự động được gọi. Bạn có thể sử dụng từ khóa parent::__construct() để gọi constructor của class cha từ class con.
Ví dụ:
class Vehicle {
public $engine;
// Constructor class cha
public function __construct($engine) {
$this->engine = $engine;
}
}
class Car extends Vehicle {
public $color;
// Constructor class con
public function __construct($engine, $color) {
parent::__construct($engine); // Gọi constructor của class cha
$this->color = $color;
}
public function getCarInfo() {
return "This car has a " . $this->engine . " engine and is " . $this->color;
}
}
$myCar = new Car("V6", "Red");
echo $myCar->getCarInfo(); // Output: This car has a V6 engine and is RedGiải thích:
- Class
Vehiclecó constructor nhận tham số$engine. - Class
Carkế thừa từ classVehiclevà có constructor riêng nhận thêm tham số$color. - Bên trong constructor của class con
Car, chúng ta sử dụngparent::__construct($engine)để gọi constructor của class cha và truyền giá trị cho thuộc tính$engine.
7. Kết luận
Constructor là một thành phần rất quan trọng trong lập trình hướng đối tượng vì nó cho phép bạn thiết lập các thuộc tính ban đầu của đối tượng khi nó được tạo ra. Sử dụng constructor giúp mã của bạn trở nên dễ bảo trì, dễ đọc và quản lý hơn. Bạn có thể khai báo constructor với nhiều tham số, thiết lập giá trị mặc định cho các tham số đó, hoặc kế thừa constructor từ các class cha.
Trong bài học tiếp theo, chúng ta sẽ tiếp tục khám phá các khái niệm nâng cao hơn trong lập trình hướng đối tượng với PHP, bao gồm destructor, kế thừa, đa hình, và interface.








