Plugin Magento2 seputar metode yang berbeda antara pemanggilan dan Penutupan parameter pada param $ lanjutkan

12

Saya telah memeriksa magento2, Ada dua jenis parameter yang dapat dikirim ke

sekitar metode

  • \Closure $proceed contoh aroundSave(\Magento\Catalog\Model\Product $subject, \callable $proceed)
  • \callable $proceed contoh aroundSave(\Magento\Catalog\Model\Product $subject, \Closure $proceed)

Sekarang pertanyaan saya:

  1. Apa perbedaan antara penutupan dan panggilan?
  2. Mengapa menggunakan kami mendefinisikan tipe dua tipe berbeda untuk parameter $ continue?
  3. Apa gunanya parameter dua jenis ini?

Adakah yang bisa menjelaskan detailnya

Amit Bera
sumber
1
Pertanyaan bagus! Amit
Rakesh Jesadiya
dapatkah seseorang menjelaskannya lagi secara sederhana? ini akan sangat membantu
aravind

Jawaban:

9

Anda punya jawaban di sini: https://stackoverflow.com/a/29730810/4629261

Perbedaannya adalah, bahwa [ Closure] harus merupakan fungsi anonim, di mana [ callable] juga bisa menjadi fungsi normal.

Anda dapat melihat / menguji ini dengan contoh di bawah ini dan Anda akan melihat bahwa Anda akan mendapatkan kesalahan untuk yang pertama:

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!

Jadi jika Anda hanya ingin mengetik petunjuk gunakan fungsi anonim: Closuredan jika Anda juga ingin mengizinkan fungsi normal gunakan callablesebagai petunjuk jenis.

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

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

Dalam dokumen Magento, mereka menyarankan untuk menggunakan [callable]

Sebelum daftar argumen metode asli, sekitar metode menerima panggilan yang akan memungkinkan panggilan ke metode berikutnya dalam rantai. Ketika callable dipanggil, plugin berikutnya atau fungsi yang diamati dipanggil.

Saat Anda membungkus metode yang menerima argumen, plugin Anda juga harus menerima argumen itu dan Anda harus meneruskannya ketika Anda memohon proses yang dapat dilalui.

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

Vinz
sumber
bagus, jadi apa yang terbaik digunakan di sekitar metode untuk Magento?
Amit Bera
1
Saya mengedit di atas, Magento menyarankan untuk menggunakan [callable]
Vinz