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


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


bagus, jadi apa yang terbaik digunakan di sekitar metode untuk Magento?
Amit Bera

1
Saya mengedit di atas, Magento menyarankan untuk menggunakan [callable]
Vinz
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.