+1

PHP Language – Vài Phút Tìm Hiểu Lambda và Closure Function

Do mình đang ngồi viết Unit Test, gặp trúng mấy hàm Callback này nọ nên dành thời gian tìm hiểu luôn về ClosureLambda function. Sẵn tiện viết một bài chia sẽ cho các anh em một tí về Backend 😛

Thật ra bài viết nói về chúng thì có rất nhiều trên mạng rồi, ở đây mình chỉ tóm tắt và giới thiệu cách sử dụng chúng trong chương trình thực tế mà thôi.

Các anh em có thể xem bài viết gốc của mình ở đây nhé: https://hungphamdevweb.com/php-language-vai-phut-tim-hieu-lambda-va-closure-function.html

Lambda là gì ?

Lambda hay còn gọi là hàm ẩn danh (anonymous function), chúng có thể lưu dưới dạng một giá trị của biến và được truyền như một tham số cho một hàm hoặc một phương thức khác.

Cú pháp hàm Lambda function:

function (argument)
{
    //code
}

Closure là gì ?

Closure là một anonymous function và nó có thể truy cập các biến bên ngoài phạm vi mà nó được tạo ra. Một đặc điểm nhận dạng Closure function là nó sẽ có từ khoá use phía sau tên của hàm.

Cú pháp hàm Closure function:

function (argument) use (scope) {
    //code
}

Ví dụ về Closure và Lambda function

Để hiểu rõ hơn vấn đề thì chúng ta sẽ cùng nhau làm rõ qua vài ví dụ sau: ``` $input = array(1, 2, 3, 4, 5); $output = array_filter($input, function ($v) { return $v > 2; }); ``` Ở trên chúng ta có một ví dụ về Filter Input bằng việc loại bỏ những phần tử lớn 2.

function ($v) { return $v > 2; } ở đây là một Lambda function và nó được lưu dưới dạng như một giá trị đầu vào.


$input = array(1, 2, 3, 4, 5);
$output = array_filter($input, $max_comparator);

Giả sử mình có một hàm ở trên làm thế nào để chuyển nó thành Closure function?

{
  return function ($v) use ($max) { return $v > $max; };
};

$input = array(1, 2, 3, 4, 5);
$output = array_filter($input, $max_comparator(2));

Ở đây mình dùng use($max) để biến anonymous function của mình thành Closure function và biến $max sẽ được truyền tham khảo khi mình gọi $max_comparator(2)

Kết Luận

OK thì 2 cái này hàm này nó chỉ có nhiêu đây, tuỳ mỗi trường hợp mà chúng ta sẽ áp dụng phù hợp. Đây là một kiến thức cơ bản mà các anh em nên trang bị cho mình vì nó sẽ giúp ích rất nhiều trong việc phỏng vấn.

Ngoài ra thì các anh em có thể tham khảo các nguồn bên dưới để hiểu thêm nhé:

  • https://www.php.net/manual/en/class.closure.php
  • https://php100.wordpress.com/2009/04/13/php-y-combinator/
Thân chào và quyết thắng hẹn gặp lại trong một bài viết khác vào một ngày không xa

All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí