Tìm hiểu về Closure trong PHP7


1.  Closure::call()


Closure :: call () được thêm vào như là một cách tạm thời để ràng buộc tạm thời một phạm vi đối tượng để đóng và gọi nó. Hiệu suất hoạt động nhanh hơn nhiều so với bindTo của PHP 5.6.

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, phương thức này sẽ gọi đến một đối tượng và gán nó vào hàm closure.

<?php
   class A {
      private $x = 1;
   }

   // Closure trong php 7
   $getValue = function() {
      return $this->x;
   };

   // Gán kiểu bindTo cho hàm $getValue
   $value = $getValue->bindTo(new A, 'A');

   print($value());
?>


Kết Quả : 1

2.  Closure Call


Các lớp không xác định có thể được định nghĩa bằng lớp mới. Lớp vô danh có thể được sử dụng thay cho một định nghĩa lớp đầy đủ.

<?php
   interface Logger {
      public function log(string $msg);
   }
 
   class Application {
      private $logger;
 
      public function getLogger(): Logger {
         return $this->logger;
      }
 
      public function setLogger(Logger $logger) {
         $this->logger = $logger;
      }  
   }
 
   $app = new Application;
   $app->setLogger(new class implements Logger {
      public function log(string $msg) {
         print($msg);
      }
   });
 
   $app->getLogger()->log("My first Log Message");
?>
 
Kết Quả : My first Log Message

3.  Lời kết

Chưa có ứng dụng thực tế rõ ràng cho hai  hàm này, bài này mình chỉ viết ở mức độ tham khảo hi vọng có ích cho việc tìm hiểu của các bạn sau này.




No comments:

Post a Comment