Làm cách nào để gọi một hàm ẩn danh trong PHP?

PHP5. 3 bắt đầu với việc thêm các tính năng mới trong PHP làm thay đổi trò chơi mãi mãi bằng ngôn ngữ. Đây là các hàm lambda/đóng cửa & không gian tên. Ở đây trong hướng dẫn này, chúng ta sẽ khám phá lambda và các hàm đóng trong PHP với một số ví dụ thực tế

Trong hướng dẫn này, chúng ta sẽ tìm hiểu hàm lambda là gì và cách đóng với một ví dụ mã hóa để dễ hiểu

Vì vậy, trở lại năm 2008, một RFC (Yêu cầu nhận xét) đã được đề xuất bởi Christian Seiler, Dmitry Stogov, trong đó gợi ý rằng nếu không có hỗ trợ cho các bao đóng, thì

OUTPUT - 

44
4 không đủ hữu ích để thêm chúng vào PHP

Hàm lambda đóng vai trò quan trọng trong việc phát triển hàm đóng. Đầu tiên, chúng ta sẽ hiểu về hàm lambda, sau đó chúng ta sẽ xem mối quan hệ của nó với bao đóng

Hàm lambda trong php là gì?

Hàm Lambda đã được thêm vào & nó là một hàm PHP ẩn danh có thể được lưu trữ trong một biến và được chuyển làm đối số cho các hàm/phương thức khác

Ghi chú

Hàm ẩn danh – Như tên gọi, đây là một hàm được khai báo mà không có bất kỳ tên nào để gọi nó. Do đó, chức năng ẩn danh thường không thể truy cập trực tiếp sau khi tạo

Chức năng ẩn danh cũng có thể được tìm thấy trong các ngôn ngữ khác nhau như JavaScript, Java, C #, v.v.

Trước PHP 5. 3, hành vi trên có thể xảy ra khi sử dụng hàm create_function(), nhưng vì hàm này đang thực hiện eval() (đang gặp một số vấn đề về bảo mật) bên trong, đồng thời cũng có hiệu suất và mức sử dụng bộ nhớ kém. Do đó, hãy sử dụng chức năng lambda nếu máy chủ được cài đặt với

OUTPUT - 

44
5

Hãy hiểu chức năng lambda với ví dụ đơn giản -

OUTPUT - 

44

Trong ví dụ trên, chúng ta đã định nghĩa hàm lambda và gán nó cho $add. Chúng ta có thể thấy rằng hàm lambda này không có tên. Cấu trúc đơn giản-

Chúng tôi đã xác định hàm và chuyển hai tham số vào đó, trên đó chúng tôi sẽ thực hiện thao tác bổ sung và sau đó chúng tôi sẽ sử dụng câu lệnh return để trả về giá trị kết quả đó

Nhưng làm thế nào để gọi chức năng này?

Sau đó, chúng tôi sử dụng biến đó $add làm tên hàm và chuyển hai số nguyên làm tham số. Khi chúng tôi nhận được đầu ra, chúng tôi chỉ cần in nó. Đơn giản phải không?

Bây giờ, chúng ta sẽ xem cách truyền hàm lambda làm tham số hàm trong PHP.
Hãy sử dụng ví dụ tương tự-

OUTPUT - 

SUM: 44

Trong ví dụ trên, chúng tôi đã xác định hàm print_addition() và sau đó chuyển biến $add (hàm lambda) làm tham số. Vì vậy, hàm lambda đầu tiên sẽ được thực thi và sẽ trả về 44, sau đó giá trị 44 này được truyền dưới dạng tham số cho hàm print_addition(). Điều này sẽ in đầu ra là

OUTPUT - 

44
6

Bây giờ, chúng ta đã biết hàm lambda là gì và cú pháp của nó. Bây giờ, chúng ta sẽ tập trung vào xem đóng trong PHP là gì và cách sử dụng nó

Các cách khác nhau để sử dụng chức năng lambda

1. Gán hàm Lambda/Ẩn danh cho một Mảng

________số 8

Trong ví dụ trên, chúng ta đã định nghĩa một mảng $arr và gán hàm lambda cho một phần tử mảng $arr[‘addition’] và cuối cùng chúng ta thực thi hàm đó bằng cách sử dụng mảng và sử dụng phần tử khóa thích hợp(‘addition’)

2. Truyền hàm đóng/hàm ẩn danh làm tham số – cách 1

Trong trường hợp này, chúng tôi đã chuyển hàm đóng/hàm ẩn danh được lưu trữ trong biến cho hàm cùng với các số cần thiết để bổ sung. Vì vậy, bên trong print_addition(), chúng tôi đã gọi hàm lambda và truyền hai tham số và nó sẽ trả về tổng

3. Truyền hàm đóng/hàm ẩn danh làm tham số – cách 2

OUTPUT - 

44
0

Trong trường hợp này, chúng tôi đã chuyển trực tiếp hàm đóng/hàm ẩn danh dưới dạng tham số cho hàm cùng với các số cần thiết để bổ sung. Vì vậy, bên trong print_addition(), chúng tôi đã gọi hàm lambda và truyền hai tham số và nó sẽ trả về tổng

Tại sao nên sử dụng hàm lambda trong PHP?

Hàm lambda hữu ích khi chỉ được yêu cầu sử dụng hàm một lần. Về cơ bản, khi chúng tôi tạo một chức năng có sẵn ở phạm vi toàn cầu và sử dụng nó một lần trong một chức năng cụ thể thì không có ý nghĩa gì

Vì vậy, cách tốt hơn là biến hàm đó thành hàm lambda và biến nó thành một phần của hàm/phương thức tùy chỉnh của bạn

Đóng cửa trong PHP là gì?

Một bao đóng cũng là một hàm lambda/ẩn danh cũng có thể kế thừa các biến từ phạm vi cha. Nó có nghĩa là, nó có thể truy cập một biến được xác định bên ngoài phạm vi của nó, nơi nó được xác định

Để truy cập các biến bên ngoài bên trong hàm lambda, chúng ta cần sử dụng cấu trúc ngôn ngữ sử dụng

OUTPUT - 

44
1
OUTPUT - 

44
2

Trong phần đầu tiên của ví dụ, khi chúng ta cố gắng truy cập biến bên ngoài $name bên trong hàm lambda thì nó báo lỗi “ Thông báo. biến không xác định. thông báo “. Điều đó có nghĩa là cố gắng truy cập biến toàn cục bên trong hàm lambda là không hợp pháp. Do đó, để truy cập vào biến phạm vi toàn cầu bên trong hàm lambda, bao đóng xuất hiện và điều này có thể được thực hiện bằng cách sử dụng cấu trúc ngôn ngữ use().

Vì vậy, trong phần thứ hai, chúng ta đã chuyển biến toàn cục

OUTPUT - 

44
7 trong mệnh đề sử dụng của hàm lambda và sau đó in biến đó

Nhưng giả sử chúng ta muốn thay đổi biến toàn cục

OUTPUT - 

44
7 bên trong hàm lambda và muốn lấy giá trị cập nhật bên ngoài hàm thì sao?. Có thể không?

Trong ví dụ trên, chúng ta truyền biến $name theo giá trị và để cập nhật giá trị, chúng ta cần truyền biến theo tham chiếu. Điều này có thể được thực hiện bằng cách sử dụng & (dấu và) trước biến $name

OUTPUT - 

44
0

Vì vậy, trong trường hợp này, bây giờ phạm vi của cả biến toàn cục và hàm trở thành toàn cầu vì cả hai biến được xác định bởi cùng một tham chiếu và trỏ đến cùng một vị trí bộ nhớ. Do đó, bất cứ khi nào biến cục bộ (bên trong hàm lambda) bị thay đổi, thì biến bên ngoài hàm cũng bị thay đổi và ngược lại.

Closure đóng một vai trò quan trọng trong các framework PHP hiện đại như Symfony, Laravel, v.v.

Chúng ta có thể sử dụng Closure trong PHP ở đâu?

Bao đóng rất hữu ích khi sử dụng các hàm PHP chấp nhận hàm gọi lại. PHP có một số hàm chấp nhận gọi lại dưới dạng tham số như usort(), array_map(), array_walk(), array_filter(), array_reduce(), v.v.

Sử dụng usort() với đóng là gọi lại-

OUTPUT - 

44
1
OUTPUT - 

44
2

Với mảng số, chúng ta có thể sử dụng hàm usort() để sắp xếp các phần tử theo thứ tự tăng dần theo mặc định nhưng nếu chúng ta có một mảng kết hợp và chúng ta muốn sắp xếp mảng dựa trên một phần tử khóa cụ thể thì sao?. Chà, lúc đó chúng ta có thể sử dụng chính hàm usort() bằng cách sử dụng hàm gọi lại

Trong ví dụ trên, chúng tôi đã chuyển bao đóng dưới dạng tham số thứ hai trong hàm usort(), sau đó so sánh từng giá trị và sắp xếp lại theo thứ tự tăng dần

Sử dụng array_map() với đóng là gọi lại-

Như tên cho thấy, nó chủ yếu được sử dụng để thực hiện một hành động trên một mảng được cung cấp. Giống như trong ví dụ dưới đây, chúng ta đang nhân từng phần tử mảng với 2

OUTPUT - 

44
3

Các hàm Lambda và Đóng trong PHP

Một điều quan trọng cần nhớ rằng, ngay cả Core Team cũng đã thêm chức năng này trong 5. 3 nhưng phát hành 7. 0 chức năng ẩn danh đã được giới thiệu. Với các lớp ẩn danh, PHP đã nhảy lên một tầm cao mới trong hệ sinh thái PHP

Phần kết luận-

Vì vậy, việc bổ sung lambda và các hàm đóng trong PHP cung cấp một số chức năng mới và khả năng sửa đổi mã cũ để sạch hơn. Nó đã được áp dụng trong nhiều khung công tác PHP tiên tiến hiện nay. Cần có thời gian để hiểu tầm quan trọng của nó và triển khai nó trong mã kế thừa hiện tại nhưng muộn còn hơn không

Làm cách nào để sử dụng chức năng ẩn danh trong PHP?

Hàm ẩn danh, còn được gọi là bao đóng, cho phép tạo các hàm không có tên cụ thể. Chúng hữu ích nhất với vai trò là giá trị của các tham số có thể gọi được, nhưng chúng cũng có nhiều cách sử dụng khác. Các hàm ẩn danh được triển khai bằng lớp Đóng. printf("Xin chao %s\r\n", $name);

Làm thế nào để gọi một hàm trong PHP?

Có hai phương pháp để thực hiện việc này. Một là trực tiếp gọi hàm theo tên biến bằng cách sử dụng dấu ngoặc và tham số và cách còn lại là sử dụng hàm call_user_func() nhưng trong cả hai phương thức đều sử dụng tên biến. call_user_func( $var );

Cú pháp cho một hàm ẩn danh là gì?

Cú pháp cơ bản là tên_hàm = @(tên_biến) matlab_expression ; .

FN() PHP là gì?

Định nghĩa và cách sử dụng . Các hàm mũi tên chỉ khả dụng trong phiên bản PHP 7. 4 trở lên. Các hàm mũi tên có quyền truy cập vào tất cả các biến từ phạm vi mà chúng được tạo. used to create arrow functions. Arrow functions are only available in PHP versions 7.4 and up. Arrow functions have access to all variables from the scope in which they were created.