Plugin Magento2 xoay quanh phương thức khác nhau giữa các tham số đóng và có thể gọi được trên param $ tiến hành


12

Tôi đã kiểm tra magento2, Có hai loại tham số có thể được gửi đến

phương pháp xung quanh

  • \Closure $proceed thí dụ aroundSave(\Magento\Catalog\Model\Product $subject, \callable $proceed)
  • \callable $proceed thí dụ aroundSave(\Magento\Catalog\Model\Product $subject, \Closure $proceed)

Bây giờ câu hỏi của tôi:

  1. Có gì khác nhau giữa đóng cửa và có thể gọi được?
  2. Tại sao sử dụng chúng tôi xác định loại hai loại khác nhau cho tham số $ tiến hành?
  3. Việc sử dụng hai loại tham số này là gì?

Có thể mô tả chi tiết không


1
Câu hỏi hay! Amit
Rakesh Jesadiya

ai đó có thể giải thích nó một lần nữa bằng những thuật ngữ đơn giản? nó sẽ rất hữu ích
aravind

Câu trả lời:


9

Bạn có câu trả lời tại đây: https://stackoverflow.com/a/29730810/4629261

Sự khác biệt là, [ Closure] phải là một hàm ẩn danh, trong đó [ callable] cũng có thể là một hàm bình thường.

Bạn có thể xem / kiểm tra điều này với ví dụ bên dưới và bạn sẽ thấy rằng bạn sẽ gặp lỗi cho lần đầu tiên:

function callFunc1(Closure $closure) {
    $closure();
}

function callFunc2(Callable $callback) {
    $callback();
}

function xy() {
    echo 'Hello, World!';
}

callFunc1("xy"); // Catchable fatal error: Argument 1 passed to callFunc1() must be an instance of Closure, string given
callFunc2("xy"); // Hello, World!

Vì vậy, nếu bạn chỉ muốn gõ hàm ẩn danh, hãy sử dụng: Closurevà nếu bạn cũng muốn cho phép các hàm bình thường sử dụng callablelàm gợi ý kiểu.

http://php.net/manual/en/ class.clenses.php

http://php.net/manual/en/lingu.types.callable.php

Trong tài liệu Magento, họ đề nghị sử dụng [có thể gọi được]

Trước danh sách các đối số của phương thức ban đầu, xung quanh các phương thức sẽ nhận được một cuộc gọi sẽ cho phép gọi đến phương thức tiếp theo trong chuỗi. Khi có thể gọi được, plugin tiếp theo hoặc chức năng quan sát được gọi.

Khi bạn bao bọc một phương thức chấp nhận các đối số, plugin của bạn cũng phải chấp nhận các đối số đó và bạn phải chuyển tiếp chúng khi bạn gọi tiến trình có thể gọi được.

http://devdocs.magento.com/guides/v2.0/extension-dev-guide/plugins.html#defining-a-plugin


tốt, vậy cái gì là tốt nhất để sử dụng trong phương pháp xung quanh magento?
Amit Bera

1
Tôi đã chỉnh sửa ở trên, Magento đề nghị sử dụng [có thể gọi được]
Vinz
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.