Giới thiệu
Trong thuật ngữ lập trình hướng đối tượng, constructor (hàm khởi tạo) là phương thức được định nghĩa bên trong một lớp và được gọi tự động tại thời điểm tạo đối tượng. Mục đích của constructor là khởi tạo đối tượng. Trong PHP, phương thức có tên đặc biệt __construct đóng vai trò constructor.
Cú pháp
__construct([mixed $args = ""]): void
Ví dụ constructor cơ bản
Constructor tự động thực thi khi đối tượng được khai báo:
<?php
class myclass {
function __construct() {
echo "object initialized";
}
}
$obj = new myclass();
?>
Kết quả
object initialized
Constructor với tham số
Các thuộc tính lớp được khởi tạo bằng constructor có tham số:
<?php
class rectangle {
var $height;
var $width;
function __construct($arg1, $arg2) {
$this->height = $arg1;
$this->width = $arg2;
}
function show() {
echo "Height=$this->height Width=$this->width";
}
}
$obj = new rectangle(10, 20);
$obj->show();
?>
Kết quả
Height=10 Width=20
Constructor trong kế thừa
Nếu lớp cha có constructor, nó có thể được gọi trong constructor của lớp con bằng parent::__construct(). Tuy nhiên, nếu lớp con không định nghĩa constructor, nó sẽ kế thừa constructor từ lớp cha.
<?php
class a {
function __construct() {
echo "this is a constructor of base class\n";
}
}
class b extends a {
function __construct() {
parent::__construct();
echo "this a constructor class b\n";
}
}
class c extends a {
// không định nghĩa constructor
}
$a = new a();
$b = new b();
$c = new c();
?>
Kết quả
this is a constructor of base class this is a constructor of base class this a constructor class b this is a constructor of base class
Destructor (Hàm hủy)
Destructor là phương thức được gọi tự động ngay khi garbage collector (bộ dọn rác) phát hiện một đối tượng không còn tham chiếu nào. Trong PHP, destructor có tên là __destruct. Trong trình tự shutdown (tắt), các đối tượng cũng sẽ bị hủy. Destructor không nhận tham số và không trả về giá trị.
Ví dụ
<?php
class myclass {
function __construct() {
echo "object is initialized\n";
}
function __destruct() {
echo "object is destroyed\n";
}
}
$obj = new myclass();
?>
Kết quả
object is initialized object is destroyed