Home PHP OOP Bài 2 – PHP OOP: Lớp, thuộc tính và phương thức trong Lập trình hướng đối tượng

Bài 2 – PHP OOP: Lớp, thuộc tính và phương thức trong Lập trình hướng đối tượng

by Tân Hồng IT

Bài viết thứ 2 trong sesries học PHP OOP chúng ta sẽ tìm hiểu về Class (Lớp), Properties (Thuộc tính) và Method (Phương thức) trong lập trình hướng đối tượng PHP. Để nắm rõ lại kiến thức về lập trình hướng đối tượng, tính chất cũng như ưu và nhược điểm thì các bạn hãy đọc lại bài 1 Lập trình hướng đối tượng là gì nhé!

Trong lập trình hướng đối tượng, bạn tương tác với ứng dụng của mình bằng cách sử dụng các object. Điều này trái ngược với lập trình thủ tục (procedural), nơi bạn chủ yếu tương tác với các hàm và biến toàn cục.

Trong OOP, có khái niệm về “class“, được sử dụng để mô hình hóa hoặc ánh xạ một thực thể trong thế giới thực sang một template dữ liệu (properties – các thuộc tính) và chức năng (methods – các phương thức). Một “object” là giá trị của một class và bạn có thể tạo nhiều giá trị trong cùng một class đó.

Ví dụ: Một class Employee sẽ có nhiều object là giá trị của class này như: fristname, lastname, name, address,…

class properties method php oop

Class, Properties, Method Object PHP OOP

Để hiểu rõ và đi sâu vào chuyên đề hôm nay, chúng ta sẽ lần lượt đi qua các tiêu đề sau. Đầu tiên chúng ta sẽ đi qua lý thuyết về một số khái niệm và sẽ vào thực hành về code sau nhé.

Lớp ( Class ) trong PHP là gì?

Lớp (class) nghĩa là một khung kịch bản của một đối tượng, hoặc bạn có thể hiểu đối tượng được tạo ra từ một lớp. Trong lớp nó sẽ có tập hợp các thuộc tính (properties), và lớp nó có thể chứa các hàm mà các hàm này chúng ta gọi nó là phương thức (method). Lớp (class) có thể được ví như là một mẫu khung mô tả trạng thái, hành động của đối tượng đó, trong khi các đối tượng chỉ là các thể hiện riêng lẻ của một lớp!

Ví dụ:

  • Chiếc xe là 1 class, trong chiếc xe đó nó có các thuộc tính như màu đỏ, 1 cầu 2 cầu, và các hành động như chạy, lùi, thắng ta xem như một phương thức,…
  • Khi nói về “con người”, đó là một class, chúng ta có thể hình dung ra được các đặc điểm chung về con người như màu tóc, màu da, màu mắt, dáng người, số đo 3 vòng,.. tất cả các yếu tố đó gọi là thuộc tính.

Nếu xét về mặt quan hệ thì mỗi một đối tượng thì sẽ có một hoặc nhiều lớp (class), và ở trong class thì sẽ có một hoặc nhiều các thuộc tính, phương thức khác nhau.

Để khai báo class trong PHP thì chúng ta sử dụng cú pháp sau:

<?php
class Employee
{
    //this is code
}

Trong đó: Employee là tên của class.

Quy tắc đặt tên class trong PHP

  • Phải được bắt đầu bằng ký tự hoặc dấu _
  • Không được bắt đầu bằng số
  • Có thể chứa ký tự A-z, ký số 0-9 hoặc dấu _
  • Được Viết Hoa các ký tự đầu tiên của mỗi từ

Cách tốt nhất để hiểu các khái niệm mới là qua ví dụ. Vì vậy, hãy xem class Employee trong snippet sau:

<?php
class Employee
{
    
    // Các properties
    private $first_name;
    private $last_name;
    private $age;
    private $address;

    //Các method
    public function __construct($first_name, $last_name, $age, $address) // hàm __construct là 1 hàm khơi tạo, bạn sẽ được học về nó ở bài sau.
    {
        $this->first_name = $first_name;
        $this->last_name = $last_name;
        $this->age = $age;
        $this->address = $address;
    }

    public function getFirstName()
    {
        return $this->first_name;
    }

    public function getLastName()
    {
        return $this->last_name;
    }

    public function getAge()
    {
        return $this->age;
    }
    public function getAddress()
    {
        return $this->address;
    }
}

Câu lệnh class Employee trong dòng số 2 định nghĩa class Employee. Sau đó, chúng ta tiếp tục khai báo các thuộc tính, hàm constructor và các phương thức class khác.

Ngoài ra cấu trúc của một class còn  có thêm 2 hàm khác nữa:

  • Hàm constructor là một phương thức class đặc biệt tự động được gọi khi bạn khởi tạo một object.
  • Hàm destructor là hàm được gọi khi đối tượng bị hủy hoặc tập lệnh bị dừng hoặc thoát.

Trong tự nhiên, thuộc tính được hiểu nôm na là các tính chất mô tả về đặc điểm của một sự vật, sự việc nào đó.

  • 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.

Trong lập trình, thuộc tính (properties) là các biến hay các hằng dùng để lưu trữ dữ liệu chứa thông tin về object và kèm theo cơ chế truy cập của nó.

  • Trong ví dụ về Employee ở snippet trên, chúng ta đã xác định các thuộc tính first_namelast_name, ageaddress. Trong đa số các trường hợp, các thuộc tính của class được truy xuất thông qua các object được khởi tạo.

Cú pháp để khai báo thuộc tính (properties) trong class của PHP đơn giản như sau:

<?php
class Name
{
    //đối với thuộc tính động
    var $propertyName;
    //đối với thuộc tính cố định (hằng số)
    const $constName = value;
}

Trong đó:

  • Để khai báo thuộc tính động(biến) thì chúng ta sử dụng từ khóa var, và chúng ta cũng có thể thiết lập giá trị luôn cho biến bằng phép gán. ví dụ: $propertyName= 'Nguyễn Văn Bê';
  • Để khai báo thuộc tính cố định thì chúng ta sử dụng từ khóa const, với thuộc tính này thì chúng ta không thể thay đổi giá trị của nó (giống hằng).
  • Tên của thuộc tính (properties) cũng được bao gồm các ràng buộc giống như đặt tên biến và hằng trong PHP.

Phương thức – Method trong PHP

Phương thức (Method ) 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.

Trong tự nhiên, phương thức sẽ được hiểu nôm na như là các hành động của một sự vật, sự việc nào đó.

  • Ví dụ đối tượng động vật thì có một số phương thức như: bay, nhảy, chạy, bơi,…

Đối với lập trình, phương thức của class là các hàm thực hiện các hành động cụ thể được liên kết với các object.

Dụa vào phần ví dụ trong Employee ở snippet bên trên, chúng ta sẽ xác định được phương thức getLastName, nó sẽ trả về giá trị một chuỗi là last name được liên kết với object.

Như vậy, ta có thể mô phỏng được cú pháp của phương thức (Method) trong PHP như sau:

<?php
class Name
{
    //method
    function methodName()
    {
        //code  
    }
}
  • methodName là tên của phương thức mà bạn muốn tại trong class.

Vậy là chúng ta đã điểm qua những khái niệm cần nắm rõ trong bài học này, bây giờ các bạn cùng mình đi qua phần thực hành và học thêm một số lý thuyết, khái niệm cũng như kiến thức mới ở phần thực hành này nhé!

Thực hành với Class, Properties, Method PHP

Học phải đi đôi với hành, đặc biệt trong lập trình hướng đối tượng có rất nhiều vấn đề rắc rối nên chúng ta cần phải tự thực hành nhiều thì mới mau chóng phát triển kỹ năng các bạn nhé!

Khởi tạo một object của class trong PHP

Khi bạn muốn sử dụng một class, bạn cần khởi tạo nó và kết quả cuối cùng là một object. Vì vậy, chúng ta có thể nghĩ về một class như một bản thiết kế và một object là một phiên thực tế mà bạn có thể làm việc được.

Để khởi tạo một object của class trong PHP thì chúng ta sẽ sử dụng cú pháp sau:

new ClassName(); //ClassName là tên của class các bạn cần khởi tạo

Sau đó bạn sẽ gán nó vào một biến với kiểu dữ liệu là một object bằng phép gán để sử dụng trong PHP.

<?php
//cú pháp:
$variable = new className();

//ví dụ
$nhanVienA = new  Employee();

Bạn cần sử dụng từ khóa new khi bạn muốn khởi tạo một object của bất kỳ class nào cùng với tên class của nó và bạn sẽ nhận lại một giá trị object mới của class đó.

Lưu ý: Bạn cần phải phân biệt được 2 khái niệm là: Khởi tạo một đối tượng, một lớp và khái niệm thứ 2 là Khai báo một đối tượng hoặc một lớp.

Khai báo đối tượng hay lớp là ta tạo một lớp (class) của đối tượng đó có chứa các thuộc tính và phương  thức tùy ý. Còn khởi tạo đối tượng là ta sẽ tạo ra một hình tượng cụ thể từ chính cái lớp mà ta đã khai báo.

Bạn hãy xem ví dụ dưới đây để hiểu rõ về lưu ý trên:

<?php
// Khai báo Lớp (đối tượng) là Nhân Viên
class Employee
{
    // Các thuộc tính
    public $first_name;
    public $last_name;
    public $age;
    protected $address;

    // Các phương thức
    public function getFirstName()
    {
        return $this->first_name;
    }
    public function getLastName()
    {
        return $this->last_name;
    }
    public function getAge()
    {
        return $this->age;
    }
    public function getAddress()
    {
        return $this->address;
    }
}

// Khởi tạo các lớp nhân viên mới
//Bạn có thể tạo nhiều object của cùng một class, như được hiển thị trong đoạn code sau.
$nhanVienHanhChinh = new Employee();
$nhanVienLamCong = new Employee();

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

Để 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

Từ snippet khai báo class nhân viên bên trên, ta tiếp tục sửa lại đoạn code từ dòng 30 và dán đoạn code bên dưới vào, sau đó chạy trên trình duyệt thử nhé!

// Khởi tạo các lớp nhân viên mới
$nhanVienHanhChinh = new Employee();

// Gán giá trị cho các thuộc tính
$nhanVienHanhChinh->first_name = 'Nguyen';
$nhanVienHanhChinh->last_name = 'Dang Phuong';

// Lấy các giá trị và xuất ra màn hình
echo $nhanVienHanhChinh->first_name . ' ' . $nhanVienHanhChinh->last_name;

Kết quả ở màn hình sẽ là: Nguyen Dang Phuong

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

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();

Bây giờ, cũng từ ví dụ về class Employee trong bài học này, mình sẽ khởi tạo class mới và truy xuất phương thức có trong class qua ví dụ bên dưới nhé:

<?php
// Khai báo Lớp (đối tượng) là Nhân Viên
class Employee
{
    // Các phương thức
    public function getName()
    {
        echo 'Nguyen Dang Phuong';
    }
    //mình sẽ thêm một phương thức có thêm 2 argument vào
    public function getInfo($first_name, $last_name, $age, $address)
    {
        return $first_name . ' ' . $last_name . ' ' . $age . ' ' . $address;
    }
}

// Khởi tạo các lớp nhân viên mới
$nhanVienHanhChinh = new Employee();

// Gọi đến phương thức getName() và xuất ra màn hình
$nhanVienHanhChinh->getName();
echo '<br>';
//Gọi đến phương thức getInfo có yêu cầu thêm 2 argument và xuất ra màn hình
echo $nhanVienHanhChinh->getInfo('Doan', 'Lam', 21, 'HCM City'); //vì phương thức này return trả về kết quả chứ chưa có lệnh xuất ra màn hình nên cần phải có echo

Kết quả màn hình:

Nguyen Dang Phuong
Doan Lam 21 HCM City

Chắc hẳn có một số bạn sẽ thắc mắc vì sao trong code mình có thêm các dòng code $this->$age hay $this->address vào mà mình không giải thích gì phải hong nà. Đọc tới đây thì đã chính là thời điểm hợp lý nhất để mình giải thích cho các bạn rồi nè.

$this->

Để truy xuất các thuộc tính động trong chính class đó thì chúng ta dùng từ khóa this với cú pháp: $this->propertyName;

Biến $this là biến có thể nói là  được sử dụng phổ biến nhất trong lập trình hướng đối tượng.

  • $this là một biến tham chiếu đến chính đối tượng được gọi.
  • Để gọi một property hay method của class, ta dùng dấu -> trước tên property hay method cần gọi.

Từ những yếu tố trên, ta có thể thấy rằng $this-> vẫn có thể sử dụng cho method class nữa các bạn nhé!

Thank khảo: https://stackoverflow.com/questions/1523479/what-does-the-variable-this-mean-in-php

Mình sẽ thêm ví dụ minh họa lại về biến $this này nhé:

<?php
class Employee {
    public $name;
    
    // hàm __construct là 1 hàm khơi tạo, bạn sẽ được học về nó ở các bài sau nha.
    function __construct( $name ) {
        $this->name = $name;
    }
};

$person = new Employee('Nguyen Dang Phong');
echo $person->name;
//output: Nguyen Dang Phong

Ví dụ 2: Không có hàm khởi tạo:

<?php
// Khai báo Lớp (đối tượng) là Nhân Viên
class Employee
{
    //khai báo constant
    const NUMBER = 2;

    //lấy giá trị của constant
    public function getNumber()
    {
        //gọi thuộc tính constant trong class: ( self - Tham khảo ở các bài sau của series)
        return self::NUMBER;
    }
    public function total()
    {
        //gọi phương thức trong class: $this
        return $this->getNumber();
    }
}
// Khởi tạo các lớp nhân viên mới
$nhanVienHanhChinh = new Employee();

echo $nhanVienHanhChinh->total();

Ở các bài viết sau này, bạn sẽ được học qua về kế thừa class trong PHP, và bạn sẽ phải học các mức quyền hạn truy cập như Public, Protected, Private. Và các thuộc tính lẫn phương thức đề có thể được đặt mức truy cập trong class.

Giống như ví dụ về snippet Employee, bạn sẽ thấy các biến đã được đặt mức private, còn các phương thức thì đang được đặt mức Public. Chúng ta sẽ tìm hiểu rõ về các mức truy cập này ở bài viết khác của series nhé!

Kết thúc

Qua bài học, mong các bạn có thể nắm thêm các kiến thức về class, properties, method trong lập trình hướng đối tượng PHP OOP mà mình đã liệt kê ở trên, đặc biệt, các bạn cần phải phân biệt được hai khái niệm về khởi tạokhai báo một đối tượng của class trong PHP.

Bài viết nếu các sai xót mong các bạn để lại gạch đá phản hồi dưới bài viết để mình khắc phục ạ. Cảm ơn các bạn!

Thông thường những kiến thức mới bắt đầu sẽ khá là khô khan và ít đụng đến code nhiều, nhưng các bạn đừng nản chí nhé! Vì mặc dù khô khan nhưng vẫn là nền tảng để chúng ta học những kiến thức chuyên sâu sau này á.

Mong các bạn sẽ phát triển hơn trong việc học tập của bản thân và tiếp tục đón những bài viết tiếp theo trong series học PHP nâng cao OOP – lập trình PHP hướng đối tượng nhé!

Mình xin phép tổng hợp lại bài code vừa học

<?php
// Khai báo Lớp (đối tượng) là Nhân Viên
class Employee
{
    // Khai báo các thuộc tính
    public $first_name;
    public $last_name;
    public $address;
    public $age;

    //khai báo constant
    const NUMBER = 2;

    //Khai báo Các phương thức
    public function getName()
    {
        echo 'Nguyen Dang Phuong';
    }
    
    //mình sẽ thêm một phương thức có thêm 2 argument vào
    public function getInfo($first_name, $last_name, $age, $address)
    {
        return $first_name . ' ' . $last_name . ' ' . $age . ' ' . $address;
    }

    //lấy giá trị của constant
    public function getNumber()
    {
        //gọi thuộc tính constant trong class: ( self - Tham khảo ở các bài sau của series)
        return self::NUMBER;
    }
    public function total()
    {
        //gọi phương thức trong class: $this
        return $this->getNumber();
    }
}
// Khởi tạo các lớp nhân viên mới
$nhanVienHanhChinh = new Employee();

//phần 1 : xuất giá trị của thuộc tính
// Gán giá trị cho các thuộc tính
$nhanVienHanhChinh->first_name = 'Nguyen';
$nhanVienHanhChinh->last_name = 'Dang Phuong';
// Lấy các giá trị và xuất ra màn hình
echo $nhanVienHanhChinh->first_name . ' ' . $nhanVienHanhChinh->last_name;
echo '<br>';

//phần 2 : xuất giá trị của phương thức
// Gọi đến phương thức getName() và xuất ra màn hình
$nhanVienHanhChinh->getName();
echo '<br>';
//Gọi đến phương thức getInfo có yêu cầu thêm 2 argument và xuất ra màn hình
echo $nhanVienHanhChinh->getInfo('Doan', 'Lam', 21, 'HCM City'); //vì phương thức này return trả về kết quả chứ chưa có lệnh xuất ra màn hình nên cần phải có echo
echo '<br>';

//Phần 3: Gọi phương thức trong class với $this->
echo $nhanVienHanhChinh->total();

Xem thêm:

Nếu các bạn cảm thấy Website TanHongIT.Com thật sự hữu ích mình mong các bạn có thể chia sẻ những bài viết đến cho cộng đồng cùng thao khảo nhé. Cảm ơn các bạn !!!

Các bạn có bất kì thắc mắc cần được hỗ trợ hay yêu cầu các phần mềm, thủ thuật, khoá học,… thì cứ để lại comment bên dưới bài viết hoặc liên hệ qua fanpage của TanHongIT để được hỗ trợ nhé! Mình sẽ cố gắng chia sẻ cho các bạn mọi thứ cần thiết nhất!

CHÚC CÁC BẠN THÀNH CÔNG VÀ VUI VẺ

Related Posts

0 0 vote
Article Rating
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x