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.