Trong bài này chúng ta tìm hiểu đến Closure Call, một phương thức mới trong PHP7. Và trước khi vào bài thì mình giới thiệu sơ lược qua phương thức Closure bindTo đã nhé, đây là một phương thức có chức năng tương tự như Closure Call.
1. Closure bindTo
Các phiên bản trước có sử dụng một phương thức Closure đó là phương thức Closure bindTo, phuong thức này sẽ gọi đến một đối tượng và gán nó vào hàm closure.
Ví dụ:
// Hàm closure $closure = function() { // name chính là thuộc tính name của đối tượng cần bindTo return $this->name; }; // Lớp động vật class Animal { private $name = 'Cat'; } // Khởi tạo lớp động vật $animal = new Animal(); // Lúc này $getName là một function $getName = $closure->bindTo($animal, 'Animal'); // goij function $getName; echo $getName();
Kết quả nó sẽ in ra trình duyệt là ‘Cat’.
Bài viết này được đăng tại [kiso.vn]
Như vậy đối với Closure bindTo thì kết quả sẽ trả về là function closure và đối tượng sẽ được gắn vào chính function closure đó, vì vậy để lấy kết quả thì ta phải chạy function đó (chính là $getName
).
2. Closure Call
Phương thức này giống với bindTo
, tuy nhiên điểm khác đó là tốc độ xử lý của Closure Call sẽ nhanh hơn Closure bindTo, thứ hai nữa là thay vì trả về một function thì Closure Call sẽ chạy và trả về kết quả luôn.
Ví dụ:
class Animal { private $name = 'Cat'; } $closure = function() { return $this->name; }; echo $closure->call(new Animal());
Kết quả cũng in ra trình duyệt là ‘Cat’.
3. Kết hợp với Anonymous Classes
Bây giờ ta sẽ làm một ví dụ kết hợp giữa Closure Call và Anonymous Class. Để đơn giản thì mình sẽ viết lại ví dụ ở phần 2 luôn.
Ví dụ:
// Closure $closure = function() { return $this->name; }; // Gán tham số truyền vào là một Anonymous Class echo $closure->call(new class { private $name = 'Cat'; });
Kết quả cũng không có gì thay đổi.
4. lời kết
Trên thực tế thì Closure Call và Closure bindTo mình rất ít khi sử dụng khi xây dựng dự án, tuy nhiên chúng ta cũng nên tìm hiểu nó để sau này có cơ hội thì sử dụng.
Danh sách file tải về
Tên file tải về | Pass giải nén |
---|---|
Tải bài học định dạng PDF | kiso.vn hoặc gameportable.net |
Bài viết liên quan
[CSF-2] Một số thiết lập CSF, LFD
Hôm nay mình sẽ thực hiện một số thiết lập trên CSF Mở file config để sửa đổi một số tính năng dưới /etc/csf/csf.conf Nội dung chính1. Closure bindTo2. Closure Call3. Kết hợp với Anonymous...
[CSF-1] Tăng bảo mật Server với ConfigServer Firewall (CSF)
Nội dung chính1. Closure bindTo2. Closure Call3. Kết hợp với Anonymous Classes4. lời kết1. Khái niệm CSF: CSF (ConfigServer & Firewall) là một bộ ứng dụng hoạt động trên Linux như một firewall được phát...
Sử dụng SSH Key với Gitlab và Github
Bài viết này mình sẽ hướng dẫn các bạn tạo ssh key cho Gitlab và Github SSH là gì? Secure Socket Shell là một giao thức mạng dùng để thiết lập kết nối mạng một...
Directory traversal vulnerabilities (phần 4)
Nội dung chính1. Closure bindTo2. Closure Call3. Kết hợp với Anonymous Classes4. lời kếtV. Phân tích và khai thác các lỗ hổng Directory traversal (tiếp) 5. Bypass lỗ hổng khi trang web sử dụng đường...
Directory traversal vulnerabilities (phần 3)
Nội dung chính1. Closure bindTo2. Closure Call3. Kết hợp với Anonymous Classes4. lời kếtV. Phân tích và khai thác các lỗ hổng Directory traversal 1. Lỗ hổng xảy ra khi sử dụng các hàm đọc...
Directory traversal vulnerabilities (phần 2)
Nội dung chính1. Closure bindTo2. Closure Call3. Kết hợp với Anonymous Classes4. lời kếtIII. Vì sao lỗ hổng Directory traversal xuất hiện? Với mỗi ngôn ngữ lập trình khác nhau, điểm xuất hiện các lỗ...