0

[OOP Tips] Từ khóa $this là gì? Hiểu rõ "Cái tôi" của Object trong lập trình

Trong thế giới thực, khi bạn nói "Tên của tôi là A", từ "tôi" đại diện cho chính bản thân bạn. Trong lập trình cũng vậy, khi một phương thức (method) muốn truy cập vào các thuộc tính (property) của chính nó, nó cần một "đại sứ" để đại diện. Đó chính là $this.

Hiểu đơn giản: $this là một biến tham chiếu đến đối tượng hiện tại.

1. Tại sao lại cần $this?

Hãy tưởng tượng bạn có một lớp User. Lớp này có thuộc tính $name. Khi bạn tạo ra 2 đối tượng là User AUser B, làm thế nào để phương thức getName() biết nó phải trả về tên của ông A hay ông B?

Câu trả lời là: Khi ông A gọi hàm, $this chính là ông A. Khi ông B gọi hàm, $this chính là ông B.

2. 3 Công dụng phổ biến nhất của $this

A. Phân biệt giữa Tham số và Thuộc tính (Ambuguity)

Đây là trường hợp hay gặp nhất trong hàm khởi tạo (__construct). Khi tên tham số truyền vào trùng với tên thuộc tính của Class, $this giúp trình biên dịch không bị "lú".

class SmartPhone {
    public $model;

    public function __construct($model) {
        // $model bên phải là giá trị truyền vào
        // $this->model bên trái là thuộc tính của class
        $this->model = $model; 
    }
}

B. Truy cập các phương thức trong cùng một Class

Không chỉ dùng cho biến, $this còn dùng để gọi các hàm khác đang nằm chung một nhà.

class Order {
    public function checkInventory() {
        return true;
    }

    public function placeOrder() {
        if ($this->checkInventory()) { // Gọi hàm cùng class
            echo "Đặt hàng thành công!";
        }
    }
}

C. Method Chaining (Viết code kiểu chuỗi)

Bạn có bao giờ thấy những dòng code kiểu: $object->setName('A')->setAge(20)->save(); chưa? Để làm được điều đó, mỗi hàm phải trả về chính đối tượng đó bằng cách sử dụng return $this;.

3. Những lưu ý "xương máu"

Chỉ dùng trong Object: Bạn không thể dùng $this bên ngoài class hoặc trong các phương thức static. Tại sao? Vì static thuộc về lớp (class), không thuộc về một đối tượng cụ thể nào cả, nên nó không có "cái tôi" ($this).

$this là Read-only: Bạn không thể gán $this = $somethingElse;. Nó là biến hệ thống tự định nghĩa.

Cú pháp: Trong PHP dùng $this->name, trong Java/JS dùng this.name. Đừng nhầm lẫn giữa các ngôn ngữ nhé!

Tạm kết

Hiểu về $this là bước đầu tiên để bạn làm chủ được sự tương tác giữa các đối tượng. Hãy coi $this như một chiếc gương, giúp object nhìn thấy chính những gì nó đang sở hữu.

Hy vọng bài viết giúp bạn làm chủ được "cái tôi" của object một cách chuyên nghiệp nhất!


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí