Bài 37: Lớp - thuộc tính - phương thức của đối tượng

Ngày đăng: 2024-04-14 14:40:40

Mục lục:

       1. Lớp (class) là gì?

          2. Thuộc tính của lớp

          3. Phương thức của lớp

          4. Khởi tạo, gán và gọi thuộc tính – phương thức

          5. Lớp trừu tượng abstract

          6. Hàm và lớp final

 

1. Lớp (class) là gì?

Như ta đã biết đối tượng là những sự vật, sự việc mà nó có những tính chất, hành động giống nhau, vậy thì lớp (class) có thể được ví như là một mẩu mô tả trạng thái, hành động của đối tượng đó. Có nhiều người hiểu nhầm lớp chính là đối tượng,

Cú pháp:

 

class className

{

    // Các khai báo bên trong

}

 

Ví dụ: Khai báo lớp sinh viên (lớp này đại diện cho đối tượng sinh viên)

 

class sinhvien

{

    // Các khai báo bên trong

}

 

2. Thuộc tính của lớp

Thuộc tính của lớp chính là thuộc tính của đối tượng mà lớp đó mô tả, ví dụ đối tượng động vật có những thuộc tính như: mắt, mũi, tai, chân thì những thứ đó cũng chính là thuộc tính của lớp động vật.

Cú Pháp:

 

class tenLop{

    var $tenthuoctinh;

}

 

Trong đó var $tenthuoctinh chính là cách khai báo thuộc tính cho lớp.

Ví dụ: Đối tượng động vật có các thuộc tính như mắt, mũi, tai, chân, hãy khai báo lớp động vật và các thuộc tính của lớp đó.

 

class DongVat

{

    var $mat;

    var $mui;

    var $tay;

    var $chan;

}

 

3. Phương thức của lớp

Phương thức của lớp chính là phương thức của đối tượng, đó là những hành động (hành vi) của đối tượng. Ví dụ đối tượng động vật có các hành động như ăn, sủa, chạy …

Các phương thức nó rất giống với hàm nên nó cũng có các tính chất như hàm đó chỉ khác là phương thức nằm trong một lớp đối tượng và muốn gọi đến nó thì phải thông qua lớp đối tượng này. Từ nay đễ cho dễ tôi sẽ gọi các phược thức là hàm nhé.

Cú pháp:

 

class ClassName

{

    function tenPhuongThuc($bien)

    {

        // các lệnh bên trong

    }

}

 

Trong đó tenPhuongThuc chính là tên phương thức mình muốn tạo.

Ví dụ: Đối tượng động vật có các thuộc tính như mắt, mũi, tai, chân, và các hành động như ăn, sủa, chạy hãy khai báo lớp động vật và các thuộc tính, phương thức của lớp đó.

 

class DongVat

{

    // Các thuộc tính

    var $mat;

    var $mui;

    var $tay;

    var $chan;

  

    // Các phương thức

    function an($thuc_an)

    {

        // lệnh

    }

  

    function sua()

    {

        // lệnh

    }

  

    function chay()

    {

        // lệnh

    }

}

 

4. Khởi tạo, gán và gọi thuộc tính – phương thức

Khởi tạo lớp mới:

Bạn phải phân biệt được 2 từ khởi tạo đối tượng và khai báo đối tượng, khai báo đối tượng là ta tạo một lớp (class) của đối tượng đó, còn khởi tạo đối tượng là ta tạo một hình tượng của lớp mà ta đã khai báo. Vì lớp mô phỏng cho đối tượng nên sau này tôi sẽ dùng từ lớp thay cho đối tượng luôn.

Cú pháp: $ten_bien = new ClassName();

Ví Dụ: 

// Khai báo Lớp (đối tượng) Động Vật

class DongVat

{

    // Các thuộc tính

    var $mat;

    var $mui;

    var $tay;

    var $chan;

  

    // Các phương thức

    function an($thuc_an)

    {

        // lệnh

    }

  

    function sua()

    {

        // lệnh

    }

  

    function chay()

    {

        // lệnh

    }

}

  

// Khởi tạo lớp động vật mới

$conheo = new DongVat();

$conbo = new DongVat();

$conga = new DongVat();

 

Truy xuất đến các thuộc tính của đối tượng

Để truy xuất đến các thuộc tính của đối tượng ta dùng toán tử (->) để trỏ đến.

Cú pháp: $classname->method

Ví dụ:

 

// Khởi tạo lớp động vật mới

$conheo = new DongVat($thuc_an);

  

// Gán giá trị cho các thuộc tính

$conheo->mat = 'Mắt 2 mí';

$conheo->mui = 'Mũi tây phương';

  

// Lấy các giá trị và xuất ra màn hình

// kết quả xuất ra màn hình "Mắt 2 mí"

echo $conheo->mat;

// kết quả xuất ra màn hình "Mũi tây phương"

echo $conheo->mui ;

 

Gọi các phương thức của đối tượng

Cũng tương tự như truy xuất đến các thuộc tính của đối tượng, ta dùng toán tử (->) để gọi các hàm trong đối tượng.

Cú pháp: $classname->function();

Ví dụ: 

 

class DongVat

{

    // Các phương thức

    function an($thuc_an)

    {

        echo 'Hôm Nay Ăn Món ' . $thuc_an;

    }

}

  

// Khởi tạo lớp động vật mới

$conheo = new DongVat();

  

// Gọi đến hàm ăn

// kết quả là "Hôm Nay Ăn Món Cám"

$conheo->an('Cám');

 

Các bạn thấy đó nó cũng giống như cách gọi hàm bình thường thôi đúng không nào?

Hàm trong đối tượng gọi đến các thuộc tính của chính mình bằng cú pháp sau: $this->ten_thuoc_tinh;

Ví dụ:

 

class DongVat {

    var $hello = 'Xin chào các bạn, Tôi đang ăn nhé';

    // Các phương thức

  

    // hàm (hành động) ăn

    function an()

    {

        echo $this->hello;

    }

}

  

// Khởi tạo lớp động vật mới

$conheo = new DongVat();

  

// Gọi đến hàm ăn

// kết quả "Xin chào các bạn, Tôi đang ăn nhé"

$conheo->an();

 

5. Lớp trừu tượng abstract

Nếu bạn đã từng học qua lập trình hướng đối tượng một ngôn ngữ bất kỳ khác như C++, Java thì abstract khá quen thuộc, và trong php đây cũng là một tính chất của lập trình hướng đối tượng nhưng nó không được xếp vào tính chất quan trọng, tính chất này giống như tính kế thừa theo tầm nhìn bề ngoài. Lớp Abstract sẽ định nghĩa các hàm (phương thức) mà từ đó các lớp con sẽ kế thừa nó và Overwrite lại (tính đa hình). Tất cả các phương thức của lớp abstract đều phải được khai báo là abstract và phải ở mức protected và public, không được ở mức private. Lớp Abstract có thể có thuộc tính nhưng thuộc tính không được khai báo là abstract, và bạn không thể khởi tạo một biến của lớp Abstract được.

 

Để khai báo một lớp Abstract ta dùng cú pháp sau:

abstract class BaseClass

{

    // phương thức ở mức protected

    abstract protected function hello();

  

    // Phương thức ở mức public

    abstract public function hi();

}


Trong lớp Abstract các phương thức bạn khai báo ở dạng Abstract đều phải tuân theo cú pháp trên, tức là bạn không được định nghĩa thêm dòng lệnh nào bên trong nó. Như ví dụ dưới này là sai.

abstract class BaseClass

{

    // Phương thức này sai vì hàm hello là

    // hàm abstract nên không được code bên trong nó

    abstract protected function hello()

    {

        // dòng code

        echo 1;

    }

  

}


Như tôi nói ở trên bạn không thể tạo một biến đối tượng mới của lớp Abstract, như ví dụ dưới này là sai:

abstract class BaseClass

{

    abstract protected function hello();

}

  

// Sai vì BaseClass là lớp Abstract nên không

// khởi tạo mới được

$base = new BaseClass();


Mức truy cập các hàm của Abstract phải ở public hoặc protected để lớp kế thừa có thể định nghĩa lại và các thuộc tính của lớp Abstract không được khai báo Abstract. Các bạn xem ví dụ dưới đây:

abstract class BaseClass

{

    // Đúng

    public $name;

  

    // Sai vì các thuộc tính không được để ở dạng abstract

    abstract public $title;

  

    // Đúng

    abstract protected function hello();

  

    // Sai vì hàm abstract không thể ở private

    abstract private function hi_there();

}


Lớp kế thừa từ lớp Abstracth phải Rewrite lại tất cả các hàm Abstract trong lớp Abstract, nếu không sẽ bị báo sai. Ví dụ:

abstract class Person

{

    protected $ten;

    protected $cmnd;

    protected $namsinh;

  

    abstract public function showInfo();

}

  

// Lớp này sai vì chưa viết lại hàm showInfo

class CongNhan extends Person

{

  

}

  

// Lớp này đúng vì ta đã khai báo, viết lại

// đầy đủ các hàm abstract

class SinhVien extends Person

{

    public function showInfo(){

  

    }

}

 

6. Hàm và lớp final

Lớp Final là lớp được khai báo là lớp cuối cùng, không một lớp nào có thể kế thừa nó. Tương tự như hàm Final trong Abstract hoặc trong kế thừa chỉ để gọi sử dụng, không được viết lại (Override).  Để dễ hình dung các bạn xem ví dụ sau đây và thông qua phần ghi chú tôi đã giải thích.
Ví dụ lớp final:

// Lớp Filnal

final class Person

{

    protected $ten;

    protected $cmnd;

    protected $namsinh;

    public function showInfo()

    {

        echo 'titoe.net';

    }

}

  

// Hàm này sẽ bị báo lỗi vì lớp SinhVien

// đã kế thừa một lớp Final, điều này là không thể

class SinhVien extends Person {

}

  

// Đoạn code này đúng vì lớp Final được

// sử dụng bình thường như các lớp khác

// chỉ có điều là không được kế thừa

$person = new Person;

$person->showInfo();


Ví dụ hàm final:

class Person

{

    protected $ten;

    protected $cmnd;

    protected $namsinh;

    final public function showInfo()

    {

        echo 'titoe.net';

    }

}

  

// Lớp này đúng vì lớp Person không phải

// là một lớp final

class SinhVien extends Person {

  

    // Hàm này sai vì hàm showInfo

    // là hàm final trong lớp Person

    // nên không thể Override lại

    public function showInfo(){

  

    }

  

    public function Go()

    {

        // Đoạn code này đúng vì hàm final được

        // sử dụng bình thường

        $this->showInfo();

    }

}

 

Về bài trước...

                                 Bài tiếp theo...

 

 

 


Tài liệu lập trình PHP

Bài viết trong cùng chuyên mục

Góc games giải trí



Cờ caro


Butterfly


Lật hình (luyện trí nhớ)

Cờ tướng ONLINE

Xếp hình

Ghép hình

15_PUZZLE

Kill ghosts

Banchim

Planet Defense

Tower game

Tower game

Plapy Bird (NH.Đông)

Vượt chướng ngại vật



0379136392

Thông tin liên hệ: Lê Văn Thuyên - ĐT: 0379136392 ; Gmail: lethuyen0379136392@gmail.com

Comment

 +   Lê Văn Thuyên-0379136392:Cảm ơn quý vị và các bạn đã vào Website của Lê Thuyên! Lê thuyên rất mong nhận được sự góp ý của quý vị và các bạn cho sự phát triển của website này. Xin chân thành cảm ơn!

Trả lời

 *   Dũng Trung-090567448:Lê Văn Thuyên0379136392--->Ok.Anh!

Trả lời

 *   Bé Nguyễn-benguyen@gmail,com:Lê Văn Thuyên0379136392--->Good job!

Trả lời

 +   -:

Trả lời

 +   -:

Trả lời

12526