fbpx
Search
Generic filters
Exact matches only
Filter by Custom Post Type

Try these: dockerwebpackwordpressatomic csshackerrankmalaysia

Tìm hiểu Closure và Anonymous Function trong PHP

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.

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.

$max_comparator = function ($v) { return $v > 2; };

$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?

$max_comparator = function ($max)
{
  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 😛😛

Xin chào các đồng chí tôi là Phạm Phi Hùng, tác giả của blog Hung Pham Dev Web Tôi là một Front-end Developer, kiêm writer, quay phim dạo, sửa máy dạo và làm một số ngành nghề khác nữa

Leave a reply:

Your email address will not be published.

Site Footer