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 khác bạn cũng có thể gọi lại hàm khởi tạo được. Trong một lớp có thể có hàm khởi tạo hoặc không.
Ví dụ:
1
2
3
4
5
6
7
8
9
| 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 đoạn code này sẽ xuất ra màn hình dòng chữ “Lớp Sinh Viên vừa được khởi tạo” vì khi khởi tạo đối tượng SinhVien thì hàm khởi tạo __construct() sẽ được chạy.
Bạn cũng có thể khai báo hàm khởi tạo với tên chính là tên của lớp đó như ví dụ sau là tương đương:
1
2
3
4
5
6
7
8
9
| 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(); |
Hàm khởi tạo cũng có thể có các đối số, để truyền đối số lúc khởi tạo ta làm như sau:
1
2
3
4
5
6
7
8
9
| 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 lớp Cha thì khi ta tạo một lớp con mới sẽ có các trường hợp sảy ra sau đây:
Trường hợp 1: Nếu lớp Con có hàm khởi tạo và lớp cha 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ụ:
Ví Dụ:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| 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ụ:
Ví Dụ:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| // 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ụ:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| // 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ụ:
1
2
3
4
5
6
7
8
9
10
11
12
| // 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ụ:
Ví Dụ:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| <strong> // 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();</strong> |
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”
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.
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 với php đó 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).
Nguồn: (code.freetuts.net)
0 nhận xét: