PHP NÂNG CAO
CÁC CHỦ ĐỀ
BÀI MỚI NHẤT
MỚI CẬP NHẬT

Bài 11: Hàm khỏi tạo và hàm hủy trong lập trình hướng đối tượng php

Trong mỗi lớp có hai hàm rất đặc biệt đó là hàm khởi tạo và hàm hủy. Hàm khởi tạo sẽ được tự động gọi khi bạn khởi tạo mới một đối tượng, còn hàm hủy thì sẽ được gọi khi đối tượng bị hủy.

test php

banquyen png
Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.

1. Hàm khởi tạo

Hàm khởi tạo cũng là một hàm bình thường nhưng có điểm đặc biệt là nó luôn luôn được gọi tới khi ta khởi tạo một đối tượng. Hàm khởi tạo có thẻ có tham số hoặc không có tham số, có thể có giá trị trả về hoặc không. Ở một hàm bình thường khác bạn cũng có thể gọi lại hàm khởi tạo được và hàm khởi tạo cũng có thể gọi một hàm bình thường khác.

Trong PHP có hai cách khai báo tên hàm khởi tạo. Cách thứ nhất là khai báo tên trùng với tên lớp: 

class SinhVien
{
    function SinhVien() {
        echo 'Lớp Sinh Viên vừa được khởi tạo';
    }
}
 
// khởi tạo lớp SinhVien
$sinhvien = new SinhVien();

Cách thứ hai là khai báo với tên __construct.

Bài viết này được đăng tại [free tuts .net]

class SinhVien
{
    function __construct() {
        echo 'Lớp Sinh Viên vừa được khởi tạo';
    }
}
 
// khởi tạo lớp SinhVien
$sinhvien = new SinhVien();

Kết quả của cả hai đoạn code trên sẽ xuất ra màn hình dòng chữ “Lớp sinh viên được khởi tạo” vì khi khởi tạo đối tượng SinhVien thì hàm khởi tạo __construct()SinhVien() sẽ  được tự động gọi.

Hàm khởi tạo cũng có thể có các tham số truyền vào, lúc này khi khởi tạo đối tượng thì ta sẽ truyền các tham số đó vào trong lớp.

class SinhVien
{
    function __construct($message) {
        echo $message;
    }
}
 
// khởi tạo lớp SinhVien
$sinhvien = new SinhVien('Lớp Sinh Viên vừa được khởi tạo');

2. Hàm khởi tạo trong kế thừa

Khi lớp con kế thừa từ lớp cha thì khi ta tạo một đối tượng thuộc lớp con thì sẽ xảy ra một trong các trường hợp sau đây:

Trường hợp 1: Nếu lớp Con có hàm khởi tạo và lớp cha cũng có hàm khởi tạo

Trường hợp này hàm khởi tạo của lớp con sẽ được chạy, còn hàm khởi tạo ở lớp cha không được chạy.

Ví dụ:

class A {
 
    function __construct() {
        echo 'Lớp A được khởi tạo';
    }
}
 
class B extends A {
 
    function __construct() {
        echo 'Lớp B được khởi tạo';
    }
}
 
$a = new B(); // Kết quả là Lớp B được khởi tạo

Kết quả xuất ra màn hình là “Lớp B được khởi tạo”.

Trường hợp 2: Nếu lớp con không có hàm khởi tạo, lớp Cha có hàm khởi tạo

Trường hợp này hàm khởi tạo ở lớp cha sẽ được chạy.

Ví dụ:

// Lớp A
class A {
 
    function __construct() {
        echo 'Lớp A được khởi tạo';
    }
}
 
// Lớp B
class B extends A {
 
}
 
// Khởi Tạo Lớp B
$a = new B(); // Kết quả là Lớp A Chạy

Kết quả xuất ra màn hình là “Lớp A được khởi tạo

Trường hợp 3: Lớp Con có hàm khởi tạo, lớp cha không có hàm khởi tạo

Trường hợp này hàm khởi tạo lớp con sẽ được chạy.

 Ví dụ:

// Lớp A
class A {
 
}
 
// Lớp B
class B extends A
{
    function __construct() {
        echo 'Lớp B được khởi tạo';
    }
}
 
// Khởi Tạo Lớp B
$a = new B(); // Kết quả là Lớp B Chạy

Kết quả xuất ra màn hình là “Lớp B được khởi tạo

Trường hợp 4: Cả 2 lớp chà và lớp con đều không có hàm khởi tạo

Trường hợp này đương nhiên là sẽ không có hàm nào được chạy

Ví dụ:

// Lớp A
class A {
 
}
 
// Lớp B
class B extends A {
 
}
 
// Khởi Tạo Lớp B
$a = new B(); // Kết quả là Không có gì

3. Hàm hủy

Hàm hủy là hàm tự động gọi sau khi đối tượng bị hủy, nó thường được sử dụng để giải phóng bộ nhớ chương trình. Trong đối tượng hàm hủy có thể có hoặc không.

Ví dụ:

// Lớp A
class A {
 
    function __construct() {
        echo 'Lớp A được khởi tạo <br/>';
    }
 
    function show()
    {
        echo 'Lớp A đang được sử dụng <br/>';
    }
 
    function __destruct() {
        echo 'Lớp A bị hủy  <br/>';
    }
}
 
// Chương trình
$a = new A();
$a->show();

Kết quả hiển thị ra màn hình là:

Lớp A được khởi tạo
Lớp A đang được sử dụng
Lớp A bị hủy

4. Hàm hủy trong kế thừa

Tương tự như hàm khởi tạo trong kế thừa. Nếu lớp Con có hàm hủy thì được ưu tiên chạy, còn nếu lớp Con không có hàm hủy  thì sẽ chạy ở lớp Cha, còn nếu cả 2 đều không có thì sẽ không chạy hàm nào.

5. Lời kết

Bài này chúng ta đã học được hai hàm đặc biệt trong lập trình hướng đối tượng đó là hàm khởi tạo và hàm hủy. Hàm khởi tạo thì thường hay dùng còn hàm hủy thì ít khi dùng tới nhưng tôi nghĩ bạn cũng nên biết vì đó là kiến thức của lập trình hướng đối tượng. Bài tiếp theo chúng ta sẽ tìm hiểu một tính chất mới của lập trình hướng đối tượng, đó là lớp Abstract trong php (hay gọi là lớp trừu tượng).

Danh sách file tải về

Tên file tải về Pass giải nén
Tải bài học định dạng PDF freetuts.net hoặc gameportable.net

Cùng chuyên mục:

Hàm key_exists() trong PHP

Hàm key_exists() trong PHP

Cách sử dụng key_exists() trong PHP

Hàm mysqli_fetch_row() trong PHP

Hàm mysqli_fetch_row() trong PHP

Cách sử dụng mysqli_fetch_row() trong PHP

Hàm end() trong PHP

Hàm end() trong PHP

Cách sử dụng end() trong PHP

Hàm mysqli_field_count() trong PHP

Hàm mysqli_field_count() trong PHP

Cách sử dụng mysqli_field_count() trong PHP

Hàm count() trong PHP

Hàm count() trong PHP

Cách sử dụng count() trong PHP

Hàm mysqli_field_seek() trong PHP

Hàm mysqli_field_seek() trong PHP

Cách sử dụng mysqli_field_seek() trong PHP

Hàm compact() trong PHP

Hàm compact() trong PHP

Cách sử dụng compact() trong PHP

Hàm mysqli_field_tell() trong PHP

Hàm mysqli_field_tell() trong PHP

Cách sử dụng mysqli_field_tell() trong PHP

Hàm array_values() trong PHP

Hàm array_values() trong PHP

Cách sử dụng array_values() trong PHP

Hàm mysqli_free_result() trong PHP

Hàm mysqli_free_result() trong PHP

Cách sử dụng mysqli_free_result() trong PHP

Hàm array_unshift() trong PHP

Hàm array_unshift() trong PHP

Cách sử dụng array_unshift() trong PHP

Hàm mysqli_get_charset() trong PHP

Hàm mysqli_get_charset() trong PHP

Cách sử dụng mysqli_get_charset() trong PHP

Hàm array_shift() trong PHP

Hàm array_shift() trong PHP

Cách sử dụng array_shift() trong PHP

Hàm mysqli_get_client_stats() trong PHP

Hàm mysqli_get_client_stats() trong PHP

Cách sử dụng mysqli_get_client_stats() trong PHP

Hàm array_unique() trong PHP

Hàm array_unique() trong PHP

Cách sử dụng array_unique() trong PHP

Hàm mysqli_get_client_version() trong PHP

Hàm mysqli_get_client_version() trong PHP

Cách sử dụng mysqli_get_client_version() trong PHP

Hàm array_uintesect() trong PHP

Hàm array_uintesect() trong PHP

Cách sử dụng array_uintesect() trong PHP

Hàm mysqli_get_connection_stats() trong PHP

Hàm mysqli_get_connection_stats() trong PHP

Cách sử dụng mysqli_get_connection_stats() trong PHP

Hàm array_sum() trong PHP

Hàm array_sum() trong PHP

Cách sử dụng array_sum() trong PHP

Hàm mysqli_get_host_info() trong PHP

Hàm mysqli_get_host_info() trong PHP

Cách sử dụng mysqli_get_host_info() trong PHP

Top