Nhưng thật phiền toái nếu bạn cần viết các hàm ẩn danh dài hơn bằng cách sử dụng
function countEmails[$number] {
echo 'you have ' . $number . ' emails!';
}
$multiply = function [$a, $b] {
return $a * $b;
};
echo countEmails[$multiply[2, 5]]; // you have 10 emails!
1 vì rất khó để viết phần thân hàm theo cách đó bên trong dấu ngoặc kép và sau đó thoát khỏi dấu ngoặc kép và những thứ khácPHP5. 3 đã giới thiệu hỗ trợ thực sự cho các hàm lambda/ẩn danh tương tự như cách bạn thấy trong Javascript, vì vậy bạn có thể viết mã ở trên như
$multiply = function [$a, $b] {
return $a * $b;
};
echo $multiply[5, 5]; // 25
Có thể thấy, hàm ẩn danh trên không có tên và được gán cho biến
function countEmails[$number] {
echo 'you have ' . $number . ' emails!';
}
$multiply = function [$a, $b] {
return $a * $b;
};
echo countEmails[$multiply[2, 5]]; // you have 10 emails!
3. Bạn cũng có thể chuyển cho nó các chức năng khácfunction countEmails[$number] {
echo 'you have ' . $number . ' emails!';
}
$multiply = function [$a, $b] {
return $a * $b;
};
echo countEmails[$multiply[2, 5]]; // you have 10 emails!
Bạn cũng có thể đã viết ở trên như thế này nếu bạn muốn
function countEmails[$multiply, $a, $b] {
echo 'you have ' . $multiply[$a, $b] . ' emails!';
}
$multiply = function [$a, $b] {
return $a * $b;
};
echo countEmails[$multiply, 2, 5]; // you have 10 emails!
Và thậm chí như thế này
function countEmails[$multiply, $a, $b] {
echo 'you have ' . $multiply[$a, $b] . ' emails!';
}
echo countEmails[function [$a, $b] {
return $a * $b;
}, 2, 5]; // you have 10 emails!
Bạn cũng có thể gán nó cho mảng
$array['multiply'] = function [$a, $b] {
return $a * $b;
};
echo $array['multiply'][2, 10]; // 20
Và thậm chí một đối tượng
$obj = new StdClass[];
$obj->multiply = function [$a, $b] {
return $a * $b;
};
Nhưng lưu ý ở đây là thay vì gọi nó như
function countEmails[$number] {
echo 'you have ' . $number . ' emails!';
}
$multiply = function [$a, $b] {
return $a * $b;
};
echo countEmails[$multiply[2, 5]]; // you have 10 emails!
4, thay vào đó bạn cần phải làm$multiply = $obj->multiply;
echo $multiply[2, 10]; // 20
Bây giờ, hãy tạo một chương trình nhỏ có nội dung
function countEmails[$number] {
echo 'you have ' . $number . ' emails!';
}
$multiply = function [$a, $b] {
return $a * $b;
};
echo countEmails[$multiply[2, 5]]; // you have 10 emails!
5 bằng hàm ẩn danh$multiply = function [$a, $b] {
return $a * $b;
};
echo $multiply[5, 5]; // 25
1Rất tiếc, nó dẫn đến lỗi
function countEmails[$number] {
echo 'you have ' . $number . ' emails!';
}
$multiply = function [$a, $b] {
return $a * $b;
};
echo countEmails[$multiply[2, 5]]; // you have 10 emails!
6Nó có nghĩa là chức năng ẩn danh không có quyền truy cập vào
function countEmails[$number] {
echo 'you have ' . $number . ' emails!';
}
$multiply = function [$a, $b] {
return $a * $b;
};
echo countEmails[$multiply[2, 5]]; // you have 10 emails!
7 bên trong nó. Đây chính xác là lúc chúng ta cần một bao đóng để có quyền truy cập vào biến function countEmails[$number] {
echo 'you have ' . $number . ' emails!';
}
$multiply = function [$a, $b] {
return $a * $b;
};
echo countEmails[$multiply[2, 5]]; // you have 10 emails!
7 đóĐóng cửa là gìMột bao đóng là một hàm lambda/ẩn danh nhận biết ngữ cảnh xung quanh của nó thông qua việc sử dụng từ khóa
function countEmails[$number] {
echo 'you have ' . $number . ' emails!';
}
$multiply = function [$a, $b] {
return $a * $b;
};
echo countEmails[$multiply[2, 5]]; // you have 10 emails!
9. Nó có thể truy cập một biến bên ngoài phạm vi mà nó được xác định. Xem xét hàm ẩn danh function countEmails[$multiply, $a, $b] {
echo 'you have ' . $multiply[$a, $b] . ' emails!';
}
$multiply = function [$a, $b] {
return $a * $b;
};
echo countEmails[$multiply, 2, 5]; // you have 10 emails!
0 cuối cùng và chúng tôi chuyển đổi nó thành đóng thông qua việc sử dụng từ khóa function countEmails[$number] {
echo 'you have ' . $number . ' emails!';
}
$multiply = function [$a, $b] {
return $a * $b;
};
echo countEmails[$multiply[2, 5]]; // you have 10 emails!
9 và có quyền truy cập vào biến function countEmails[$number] {
echo 'you have ' . $number . ' emails!';
}
$multiply = function [$a, $b] {
return $a * $b;
};
echo countEmails[$multiply[2, 5]]; // you have 10 emails!
7$multiply = function [$a, $b] {
return $a * $b;
};
echo $multiply[5, 5]; // 25
9Nhờ đóng [
function countEmails[$number] {
echo 'you have ' . $number . ' emails!';
}
$multiply = function [$a, $b] {
return $a * $b;
};
echo countEmails[$multiply[2, 5]]; // you have 10 emails!
9 từ khóa], bây giờ chúng tôi có thể truy cập biến function countEmails[$number] {
echo 'you have ' . $number . ' emails!';
}
$multiply = function [$a, $b] {
return $a * $b;
};
echo countEmails[$multiply[2, 5]]; // you have 10 emails!
7Nếu bạn cần thay đổi giá trị của biến bên ngoài đã truyền, tất nhiên bạn cần sử dụng tham chiếu
$multiply = function [$a, $b] {
return $a * $b;
};
echo $multiply[5, 5]; // 25
0Bạn cũng có thể chuyển đối số thông thường để đóng
$multiply = function [$a, $b] {
return $a * $b;
};
echo $multiply[5, 5]; // 25
1Bạn cũng có thể tạo một hàm đệ quy bằng cách sử dụng bao đóng một cách dễ dàng, đây là ví dụ về cách bạn có thể tạo một hàm giai thừa
$multiply = function [$a, $b] {
return $a * $b;
};
echo $multiply[5, 5]; // 25
2Lưu ý rằng
function countEmails[$multiply, $a, $b] {
echo 'you have ' . $multiply[$a, $b] . ' emails!';
}
$multiply = function [$a, $b] {
return $a * $b;
};
echo countEmails[$multiply, 2, 5]; // you have 10 emails!
5 được chuyển qua tham chiếu bằng cách sử dụng function countEmails[$multiply, $a, $b] {
echo 'you have ' . $multiply[$a, $b] . ' emails!';
}
$multiply = function [$a, $b] {
return $a * $b;
};
echo countEmails[$multiply, 2, 5]; // you have 10 emails!
6 nếu không nó sẽ không hoạt độngSự khác biệt giữa hàm ẩn danh và bao đóng là bao đóng có khả năng truy cập một biến nằm ngoài phạm vi của nó bằng cách sử dụng từ khóa
function countEmails[$number] {
echo 'you have ' . $number . ' emails!';
}
$multiply = function [$a, $b] {
return $a * $b;
};
echo countEmails[$multiply[2, 5]]; // you have 10 emails!
9. Vì vậy, đó là sự khác biệt tinh tế giữa chức năng ẩn danh và chức năng đóng. Trên thực tế, cả hai đều là thể hiện của lớp function countEmails[$multiply, $a, $b] {
echo 'you have ' . $multiply[$a, $b] . ' emails!';
}
$multiply = function [$a, $b] {
return $a * $b;
};
echo countEmails[$multiply, 2, 5]; // you have 10 emails!
8 trong nội bộ$multiply = function [$a, $b] {
return $a * $b;
};
echo $multiply[5, 5]; // 25
3Gợi ý kiểuChúng tôi biết rằng bạn đã có thể nhập một số gợi ý
- Vật
- Mảng
- giao diện
- gọi được
Nhưng bạn cũng có thể gõ gợi ý
function countEmails[$multiply, $a, $b] {
echo 'you have ' . $multiply[$a, $b] . ' emails!';
}
$multiply = function [$a, $b] {
return $a * $b;
};
echo countEmails[$multiply, 2, 5]; // you have 10 emails!
8 như hình bên dưới$multiply = function [$a, $b] {
return $a * $b;
};
echo $multiply[5, 5]; // 25
4Ở đây chúng tôi đã tạo hàm
function countEmails[$multiply, $a, $b] {
echo 'you have ' . $multiply[$a, $b] . ' emails!';
}
echo countEmails[function [$a, $b] {
return $a * $b;
}, 2, 5]; // you have 10 emails!
0 để yêu cầu loại function countEmails[$multiply, $a, $b] {
echo 'you have ' . $multiply[$a, $b] . ' emails!';
}
$multiply = function [$a, $b] {
return $a * $b;
};
echo countEmails[$multiply, 2, 5]; // you have 10 emails!
8 làm tham số thứ haiTrường hợp sử dụngHàm ẩn danh và bao đóng có thể được sử dụng trong nhiều tình huống
Là cuộc gọi lại
Bạn có thể sử dụng chúng trong các chức năng tùy chỉnh của mình dưới dạng gọi lại hoặc một số chức năng tích hợp sẵn của PHP, chẳng hạn như
function countEmails[$multiply, $a, $b] {
echo 'you have ' . $multiply[$a, $b] . ' emails!';
}
echo countEmails[function [$a, $b] {
return $a * $b;
}, 2, 5]; // you have 10 emails!
2, function countEmails[$multiply, $a, $b] {
echo 'you have ' . $multiply[$a, $b] . ' emails!';
}
echo countEmails[function [$a, $b] {
return $a * $b;
}, 2, 5]; // you have 10 emails!
3, function countEmails[$multiply, $a, $b] {
echo 'you have ' . $multiply[$a, $b] . ' emails!';
}
echo countEmails[function [$a, $b] {
return $a * $b;
}, 2, 5]; // you have 10 emails!
4, function countEmails[$multiply, $a, $b] {
echo 'you have ' . $multiply[$a, $b] . ' emails!';
}
echo countEmails[function [$a, $b] {
return $a * $b;
}, 2, 5]; // you have 10 emails!
5, v.v. Hãy lấy ví dụ về function countEmails[$multiply, $a, $b] {
echo 'you have ' . $multiply[$a, $b] . ' emails!';
}
echo countEmails[function [$a, $b] {
return $a * $b;
}, 2, 5]; // you have 10 emails!
5. Nếu bạn nhìn vào định nghĩa của nó, đây là giao diện của nó$multiply = function [$a, $b] {
return $a * $b;
};
echo $multiply[5, 5]; // 25
5Lưu ý tham số thứ hai
function countEmails[$multiply, $a, $b] {
echo 'you have ' . $multiply[$a, $b] . ' emails!';
}
echo countEmails[function [$a, $b] {
return $a * $b;
}, 2, 5]; // you have 10 emails!
7. Nó có nghĩa là nó mong đợi một cái gì đó có thể gọi được. Bất cứ khi nào bạn thấy tham số như vậy trong một số định nghĩa hàm, điều đó có nghĩa là bạn có thể áp dụng các hàm ẩn danh cho nó. Đây là ví dụ$multiply = function [$a, $b] {
return $a * $b;
};
echo $multiply[5, 5]; // 25
6trong định tuyến
Bạn có thể đã thấy các bao đóng được sử dụng trong định tuyến trong khuôn khổ như Laravel, Slim, Silex, v.v.
$multiply = function [$a, $b] {
return $a * $b;
};
echo $multiply[5, 5]; // 25
7Ở đây,
function countEmails[$multiply, $a, $b] {
echo 'you have ' . $multiply[$a, $b] . ' emails!';
}
echo countEmails[function [$a, $b] {
return $a * $b;
}, 2, 5]; // you have 10 emails!
8 được nhập từ phạm vi bên ngoài vào phạm vi đóng để nó có thể được sử dụng để hiển thị chế độ xem function countEmails[$multiply, $a, $b] {
echo 'you have ' . $multiply[$a, $b] . ' emails!';
}
echo countEmails[function [$a, $b] {
return $a * $b;
}, 2, 5]; // you have 10 emails!
9Truy cập các thành viên riêng của một lớp
Chúng ta có thể sử dụng các phương thức
$array['multiply'] = function [$a, $b] {
return $a * $b;
};
echo $array['multiply'][2, 10]; // 20
0 hoặc $array['multiply'] = function [$a, $b] {
return $a * $b;
};
echo $array['multiply'][2, 10]; // 20
1 của lớp function countEmails[$multiply, $a, $b] {
echo 'you have ' . $multiply[$a, $b] . ' emails!';
}
$multiply = function [$a, $b] {
return $a * $b;
};
echo countEmails[$multiply, 2, 5]; // you have 10 emails!
8 để truy cập dữ liệu của lớp $array['multiply'] = function [$a, $b] {
return $a * $b;
};
echo $array['multiply'][2, 10]; // 20
3 chẳng hạn$multiply = function [$a, $b] {
return $a * $b;
};
echo $multiply[5, 5]; // 25
8Bạn thấy đấy, chúng ta có thể lấy giá trị của biến riêng
$array['multiply'] = function [$a, $b] {
return $a * $b;
};
echo $array['multiply'][2, 10]; // 20
4Tương tự, cũng có thể thêm hành vi mới vào một lớp mà không thực sự sửa đổi trực tiếp nó. Khá tuyệt phải không?
Lazy-loading một lớp học
Một điều
$array['multiply'] = function [$a, $b] {
return $a * $b;
};
echo $array['multiply'][2, 10]; // 20
5 khác mà bạn có thể làm với việc đóng cửa là tải chậm một lớp. Ví dụ$multiply = function [$a, $b] {
return $a * $b;
};
echo $multiply[5, 5]; // 25
9Nếu bạn chạy mã trên, bạn có thể thấy thông báo
$array['multiply'] = function [$a, $b] {
return $a * $b;
};
echo $array['multiply'][2, 10]; // 20
6 vì người ta có thể nghĩ rằng chúng tôi đang tạo một phiên bản của $array['multiply'] = function [$a, $b] {
return $a * $b;
};
echo $array['multiply'][2, 10]; // 20
7. Điều đó không đúng, bởi vì mã bên trong hàm ẩn danh $array['multiply'] = function [$a, $b] {
return $a * $b;
};
echo $array['multiply'][2, 10]; // 20
8 không chạy cho đến khi bạn thực sự gọi nófunction countEmails[$number] {
echo 'you have ' . $number . ' emails!';
}
$multiply = function [$a, $b] {
return $a * $b;
};
echo countEmails[$multiply[2, 5]]; // you have 10 emails!
0Và bây giờ bạn sẽ thấy thông báo
$array['multiply'] = function [$a, $b] {
return $a * $b;
};
echo $array['multiply'][2, 10]; // 20
6. Vì vậy, đây là một thủ thuật khá gọn gàng để trì hoãn một số đoạn mã và chỉ sử dụng nó khi bạn cần