Hướng dẫn dùng php this trong PHP
Nếu bạn đang tìm hiểu về lập trình hướng đối tượng (OOP) ngay từ đầu sẽ làm quen với từ khóa this và self. Và bạn có thể thấy thấy cách sử dụng $this trong một số đoạn mã PHP. Vậy chúng có ý nghĩa và cách dùng như thế nào? Hãy tham khảo bài sau. $this tham chiếu đến đối tượng hiện tại của lớp. $this là biến giả được tạo ngay khi đối tượng của lớp được tạo và có thể sử dụng sau khi phương thức lớp đó được gọi từ bên trong ngữ cảnh đối tượng. Nói chung các hàm thành viên bên trong có thể truy cập các thành viên không tĩnh của một lớp (biến hoặc hàm) cho đối tượng hiện tại. Hãy quan sát ví dụ dùng $this bên dưới: ten; } } $data = new ConNguoi(); echo "Tôi tên là " . $data->setName(); ?> Đầu tiên mình sẽ khởi tạo một Class là ConNguoi. Bên trong nó sẽ đặt $ten với giới hạn truy cập là private. Và phương thức setName là public. Có nghĩa là truy cập được mọi nơi, kể cả bên ngoài lớp. Từ khóa this lúc này được sử dụng để gọi biến bất kỳ của Class và được dùng bên trong hàm thành viên. Hàm thành viên ở đây là setName. $this để trỏ đến đối tượng hiện tại . Hoặc cũng có thể sử dụng $this để gọi một hàm thành viên khác. A(); } } $data = new Vidu(); echo $data->B(); ?> Self trong PHPMột lớp có thể chứa kết hợp của các thành viên tĩnh và không tĩnh . Để truy cập các thành viên tĩnh của lớp, nó sử dụng self cùng với toán tử phân giải phạm vi ::. Toán tử phân giải phạm vi này còn được gọi là Paamayim Nekudotayim (có nghĩa là dấu hai chấm trong tiếng Do Thái) hoặc trong những từ đơn giản hơn, dấu hai chấm kép. Các hàm và biến static được liên kết với chính lớp đó. Có nghĩa là bất cứ giá trị nào mà biến static giữ, nó sẽ được chia sẻ cho tất cả các đối tượng được tạo khác. Nói một cách đơn giản, giả sử chúng ta cập nhật biến static bằng cách sử dụng $a và sau đó dùng lại $a, chúng ta cố gắng truy cập vào cùng một biến static thì sẽ nhận được cùng một giá trị và ngược lại. Self sử dụng để tham chiếu đến các phương thức và thuộc tính tĩnh (static). Hãy làm một ví dụ sau: getName(); ?> Khi chạy đoạn mã hoàn toàn bình thường. Nhưng lúc này bạn hãy thử xóa static ngay trước $name đi xem sao.
Kết luận: Như vậy là bài viết này chúng ta đã tìm hiểu về từ khóa this, selft và cách sử dụng trong Class như thế nào rồi. Nếu có bất kỳ phản hồi nào bạn hãy comment bên dưới mình sẽ giải đáp giúp bạn. Bài viết này được dịch từ nguồn in PHP, what is the difference between self and $this? nên các ví dụ thực tế tôi xin phép được giữ nguyên từ tác giả. Nội dung chính
Giới thiệuKhi chúng ta làm việc với PHP, cụ thể là các PHP Framework, bạn đã từng đọc vào core của framework đó? Bạn đã từng nghe về từ khóa Bạn đã bao giờ tự đặt câu
hỏi dùng Nhìn chung, bạn có thể hiểu rằng Tôi sẽ đưa cho các bạn một ví dụ để dễ hình dung. Chúng ta có class Animal và một class khác Tiger kế thừa từ Animal. Class Tiger sẽ override phương thức
Ta thấy rằng ở phương thức
Lý do hết sức đơn giản, con trỏ Sử dụng self thay cho $thisHãy cùng thử thay đổi phương thức
Về cơ bản ví dụ vẫn vậy chỉ thay đổi hết sức nhỏ. Ta sẽ thấy điều kỳ diệu xảy ra, kết quả chúng ta nhận được hoàn toàn khác với kết quả bên trên:
Điều gì đã xảy ra? Khi sử dụng $this và self trong ngữ cảnh static functionCâu hỏi đặt ra: Hãy cùng tìm câu trả lời thông qua một ví dụ cài đặt sau:
Kết quả nhận được:
Lỗi này xảy ra vì chúng ta đang sử dụng con trỏ
Nếu ta gọi kiểu này thì việc sử dụng con trỏ Tiếp tục với việc thay sử dụng
Đoạn code trên chạy ngon mà không hề có lỗi. Đây chính là lý do chính mà
Kết quả nhận được:
Lỗi xảy ra do thành phần non-static sẽ không được phép truy cập trong một static function. Có thể hiểu đơn giản là static function có thể được gọi mà không cần đối tượng từ class, những thành phần non-static thì lại cần đối tượng của class. Khái niệm này được base trên ý tưởng từ C++, các bạn muốn tìm hiểu sâu hơn có thể đọc thêm tại Accessing non static members from a static function. $this và self khi truy cập những thuộc tính static và các hàm staticTương tác với hàm staticHãy cùng xem ví dụ cài đặt sau:
Chúng ta sử dụng
Thử dự đoán xem điều gì sẽ xảy ra, có thể bạn sẽ nghĩ luôn đến việc báo lỗi trong trường hợp này. Tuy nhiên kết quả không phải như vậy, chúng ta vẫn nhận được kết quả: "I am an Animal!". Bởi vậy, chúng ta có thể gọi static function với từ khóa Tương tác với các thuộc tích static trong ClassSử dụng |
self | $this |
---|---|
Tham chiếu đến Class hiện tại | Tham chiếu đến đối tượng (Object) hiện tại |
Dùng để gọi các hàm static và tham chiếu đến các thuộc tính static | Có thể dùng để gọi các hàm static |
Có thể dùng trong các hàm static (để truy cập đến các hàm hay thuộc tính static khác của Class) | Không nên dùng để gọi các thuộc tính static (vì sẽ không truy cập được mà lại tự tạo ra các thuộc tính non-static của đối tượng), nên dùng self trong trường hợp này.
|
Khi được sử dụng sẽ ngăn chặn thể hiện của tính đa hình bằng việc bỏ qua vtable | Không thể sử dụng được trong các hàm static |
Hy vọng bài dịch và có chém gió thêm chút sẽ giúp các bạn hiểu hơn về self
và $this
.
Tài liệu tham khảo
- http://www.programmerinterview.com/index.php/php-questions/php-self-vs-this/