PHP Language – Vài Phút Tìm Hiểu Lambda và Closure Function
PHP
92
Closure
7
lambda
1
oop
19
White

Hùng Phạm viết ngày 21/09/2019

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 :stuck_out_tongue:

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.

$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 :stuck_out_tongue: :stuck_out_tongue:

Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

White

Hùng Phạm

16 bài viết.
15 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
7 2
CSS Sprites thật ra đã là một cái tên khá cũ rồi và mình viết bài viết này hy vọng nó sẽ hữu ích cho các anh em nào chưa bao giờ biết đến cái tên c...
Hùng Phạm viết 9 tháng trước
7 2
White
4 2
Webpack là một cái tên không quá mới nhưng mình nghĩ không ít lần các anh em đã nghe qua nó. Nhiệm vụ chính của Webpack trong hệ thống là dùng để đ...
Hùng Phạm viết 9 tháng trước
4 2
White
4 0
Trước khi bắt đầu viết tiếp phần 2, các anh em có thể xem lại Phần 1 của mình theo đường dẫn bên dưới: (Link) Hoặc là có thể xem bài viết full cả...
Hùng Phạm viết 8 tháng trước
4 0
Bài viết liên quan
White
31 4
Chào mừng sự trở lại sau kì nghỉ, đây cũng là bài viết cuối cùng trong năm 2015 của tôi. Trong bài viết này tôi sẽ giới thiệu với các bạn về Closur...
Hoàng Nguyễn viết gần 4 năm trước
31 4
White
4 2
Bash script to fast serve Laravel project Lười gõ dòng lệnh quá nên tạo ra cái script để gõ nhanh :D laravelstart.sh /bin/bash if z "$1" ] ...
Vũ Hoàng Chung viết hơn 2 năm trước
4 2
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


White
{{userFollowed ? 'Following' : 'Follow'}}
16 bài viết.
15 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!