PHP sẽ hỗ trợ các lệnh đóng nguyên bản trong 5.3. Một hàm đóng là tốt khi bạn muốn một hàm cục bộ chỉ được sử dụng cho một số mục đích nhỏ, cụ thể. Các RFC cho đóng cửa cho một ví dụ điển hình:
function replace_spaces ($text) {
$replacement = function ($matches) {
return str_replace ($matches[1], ' ', ' ').' ';
};
return preg_replace_callback ('/( +) /', $replacement, $text);
}
Điều này cho phép bạn xác định replacement
hàm cục bộ bên trong replace_spaces()
, để nó không:
1) Làm xáo trộn không gian tên chung
2) Làm cho mọi người ba năm sau tự hỏi tại sao có một hàm được định nghĩa toàn cục chỉ được sử dụng bên trong một hàm khác
Nó giữ mọi thứ có tổ chức. Lưu ý rằng bản thân hàm không có tên như thế nào, nó chỉ đơn giản được định nghĩa và gán như một tham chiếu tới $replacement
.
Nhưng hãy nhớ, bạn phải đợi PHP 5.3 :)
Bạn cũng có thể truy cập các biến bên ngoài phạm vi của nó vào một bao đóng bằng cách sử dụng từ khóa use
. Hãy xem xét ví dụ này.
$multiplier = 3;
$numbers = array(1,2,3,4);
array_walk($numbers, function($number) use($multiplier){
echo $number * $multiplier;
});
Một lời giải thích tuyệt vời được đưa ra ở đây Php lambdas và các bao đóng là gì