Trong bài viết trước chúng ta đã so sánh từ khóa this và self với cách dùng hoàn toàn khác nhau. Trong bài này lại tiếp tục phân biệt Static và Self. Khi sử dụng sẽ rất dễ bị nhầm lẫn nếu không hiểu rõ về chúng.

Trong lập trình hướng đối tượng sẽ gồm nhiều phương thức, thuộc tính tĩnh và không tĩnh. Vì vậy để cho các đoạn mã hoạt động tốt hơn, đặc biệt là với Static và Self. Vậy thì hãy cùng bắt đầu bài học ngay sau đây.

Self trong PHP

Các phương thức và thuộc tính tĩnh được khai báo với từ khóa static. Phương thức và thuộc tính tĩnh này truy cập trực tiếp mà không cần phải tạo đối tượng mới.

Đầu tiên bạn cần làm một ví dụ sau:

<?php
    Class Person {

        protected static $name = "Quach Quynh";

        public function getName() {

            return self::$name;
        }
    }
    Class Man extends Person {

        protected static $name = "Human";

    }

$data = new Man;

echo $data->getName();

?>

Bạn thấy kết quả nó vẫn chọn biến $name đầu tiên mặc dù chúng ta đã tạo đối tượng mới từ Class Man.

Với Self nó sẽ thực thi trong ngữ cảnh của lớp mà nó được đặt. Hoặc cũng có thể hiểu là Self truy xuất đến Class đã khai báo nó.

Static trong PHP

Cũng với ví dụ trên nhưng bây giờ mình sẽ thay return self::$name thành

return static::$name;

Và bây giờ kết quả hoàn toàn khác. Nó đã in ra dòng chữ Human ở Class Man kế thừa Class Person.

Tại sao lại như vậy nhỉ?

Static sẽ thực thi trong ngữ cảnh của Class, cho dù Class được gọi từ bên ngoài. Hay cũng có thể hiểu là Static truy xuất đến đối tượng hiệu tại. Đối tượng lúc này là Man.

Tổng kết: Như vậy qua bài học này bạn đã biết được Self sẽ thực thi câu lệnh theo ngữ cảnh mà nó được khai đặt. Còn với Static sẽ ngữ cảnh của Class. Còn với từ khóa this được dùng để trỏ đến đối tượng hiện tại.

Bình luận!

Xin lưu ý rằng tất cả các bình luận đều được kiểm duyệt theo chính sách bảo mật và tất cả các liên kết đều là nofollow. KHÔNG sử dụng từ khóa trong trường tên. Hãy để lại một cuộc trò chuyện cá nhân và ý nghĩa. *