Phân biệt Static và Self trong PHP

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.

[alert-box text=’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ỉ?

[alert-box text=’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ện 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.

Related Posts

Namespace trong PHP

Namespace cho phép các lớp / hàm / hằng cùng tên được sử dụng trong các ngữ cảnh khác nhau mà không có bất kỳ xung đột…

Hàm str_split() trong PHP

Bài viết này chúng ta sẽ đi tìm hiểu về hàm str_split(). Một trong những hàm thường được dùng trong PHP. Vậy cách sử dụng str_split() như…

Tạo chức năng sửa xoá thành viên bằng PHP & MySQL

Với một số trang web để quản lý thành viên (user) dễ dàng trong phần quản trị admin bạn phải khởi tạo chức năng sửa xoá thành…

Hàm str_replace trong PHP

Hàm str_replace trong PHP là gì? Hàm str_replace() trong PHP là một hàm được sử dụng để thay thế tất cả các xuất hiện của một chuỗi…

laravel8-vews-1

Views trong Laravel 8

Trong chuỗi series hướng dẫn học Laravel thì Views cũng quan trọng không kém gì so với Controller hay Model. Vậy chúng ta sẽ làm thế nào…

Validate Form trong PHP

Mặc dù trình duyệt hỗ trợ JavaScript để xác thực người dùng cho website. Tuy nhiên nếu JavaScript bị lỗi hoặc tắt đi thì công việc này…