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

Bài 09: Tính đa hình trong lập trình hướng đối tượng PHP

Trong bài này chúng ta sẽ tìm hiểu một tính chất nữa trong lập trình hướng đối tượng đó là tính đa hình.

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. Tính đa hình là gì?

Tính đa hình trong php hay còn gọi là tính đa hình trong lập trình hướng đối tượng là sự đa hình của mỗi hành động cụ thể ở những đối tượng khác nhau. Ví dụ hành động ăn ở các loài động vật hoàn toàn khác nhau như: con heo ăn cám, hổ ăn thịt, con người thì ... ăn hết =)).

Đó là sự đa hình trong thực tế, còn đa hình trong lập trình thì được hiểu là Lớp Con sẽ viết lại những phương thức ở lớp cha (ovewrite).

Ví dụ:

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

// Lớp Cha
class DongVat
{
    // Động Vật Ăn
    public function An()
    {
        echo 'Động Vật Đang Ăn';
    }
}
 
// Lớp Con
class ConHeo extends DongVat
{
    public function An()
    {
        parent::An();
        echo 'Con Heo Đang Ăn Cám';
    }
}
 
// Khai Báo Lớp on
$conheo = new ConHeo();
 
// Gọi Hàm Ăn Trong Lớp ConHeo
$conheo->An();

Ta thấy lớp ConHeo đã định nghĩa lại hàm An() của lớp DongVat nên khi gọi đến hàm An() sẽ được tính là gọi ở lớp ConHeo, nếu trong lớp ConHeo không có ham An() thì lúc này mới tính ở hàm DongVat.

Vậy bản chất của tính đa hình là gì?

Là kỹ thuật cho phép thay đổi nội dung cùng một hành vi (hàm) trong hai lớp cha và con, hay nói cách khác là viết lại hàm ở lớp cha trong lớp con.

2. Ví dụ tính đa hình

Xét ví dụ sau:

// Lớp Hình Học
class HinhHoc
{
    // Hàm Vẽ Hình
    function Ve()
    {
        // Code
    }
 
    // Hàm Tính Diện Tích Của Hình
    function tinh_Dien_Tich()
    {
        // Code
    }
}
 
// Lớp hình Vuông
class HinhVuong extends HinhHoc
{
    // Độ Dài Cạnh
    public $canh = 0;
 
    // Định Nghĩa Lại Hàm Vẽ Hình Vuông
    function Ve()
    {
        echo 'Vẽ Hình Vuông';
    }
 
    //  Định Nghĩa Lại Hàm Tính Diện Tích
    function tinh_Dien_Tich()
    {
        return $this->canh*$this->canh;
    }
}
 
// Lớp hình chữ nhật
class HinhChuNhat extends HinhHoc
{
    // Chiều Dài Và Chiều Rộng
    public $dai = 0;
    public $rong = 0;
 
    // Định Nghĩa Lại Hàm Vẽ Hình Chữ Nhật
    public function Ve()
    {
        echo 'Vẽ Hình Chữ Nhật';
    }
 
    // Định Nghĩa Lại Hàm Tính Diện Tích
    public function tinh_Dien_Tich()
    {
        return $this->dai * $this->rong;
    }
}
 
// ------------------ //
// Chương Trình Chính //
// ------------------ //
 
// Hình Chữ Nhật
$HinhChuNhat = new HinhChuNhat();
$HinhChuNhat->Ve();
echo '<br/>';

$HinhChuNhat->dai = 25;
$HinhChuNhat->rong = 20;
echo $HinhChuNhat->tinh_Dien_Tich();
echo '<br/>';
 
// Hình Vuông
$HinhVuong = new HinhVuong();
$HinhVuong->Ve();
echo '<br/>';
$HinhVuong->canh = 20;
echo $HinhVuong->tinh_Dien_Tich();

Trong ví dụ này lớp HinhHoc là lớp biểu hiện cho các hình học không gian, lớp HinhVuong và HinhChuNhat là 2 hình xác định năm trong hình học không gian.

Trong hình học không gian có các hành động như vẽ hình, tính diện tích nên  tôi khai báo 2 hàm đó ở lớp HinhHoc.

Ở lớp HinhVuong  và HinhChuNhat tôi viết lại hai hàm tính diện tích và vẽ hình vì mỗi hình có một cách tính khác nhau, nên nếu viết ở lớp HinhHoc thì không thể biểu diễn ra được cho tất cả các hình.

Lưu ý với các bạn khi viết lại hàm thì các biến truyền vào hàm ở lớp cha và lớp con phải khớp nhau, nghĩa là hàm ở lớp cha truyền vào bao nhiêu tham số thì hàm ở lớp con truyền vào bấy nhiêu tham số.

3. Lời kết

Trong bài học này tôi chỉ giới thiệu sơ lược về định nghĩa tính đa hình trong php nói chung và tính đa hình trong lập trình hướng đối tượng nói riêng. Những ví dụ tôi đưa ra chỉ để tham khảo không có tính áp dựng vào thực tế vì ở mỗi bài toán có những cách viết đa hình khác nhau, hy vọng các bạn sẽ hiểu bài :). Bài tiếp theo chúng ta sẽ tìm hiểu tính đóng gói trong php.

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