Pertimbangkan aplikasi yang memungkinkan plugin bereaksi terhadap aliran programnya.
Saya tahu 2 cara untuk mencapai ini: kait dan acara
1. Kait
Gunakan panggilan untuk mengosongkan fungsi di dalam aliran program utama. Fungsi-fungsi ini dapat ditimpa oleh plugin.
Sebagai contoh, CMS Drupal mengimplementasikan kait yang tersedia untuk modul dan tema. Berikut adalah contoh bagaimana hook diimplementasikan dalam fungsi file_copy .
function file_copy(stdClass $source, $destination = NULL, $replace = FILE_EXISTS_RENAME) {
// ... [File copying routine]
// Inform modules that the file has been copied.
module_invoke_all('file_copy', $file, $source);
return $file;
// ...
}
Modul dapat mengimplementasikan modulename_file_copy($file, $source)
fungsi yang akan dipanggil oleh module_invoke_all
in file_copy
. Setelah fungsi ini selesai, file_copy
akan melanjutkan eksekusi.
2. Acara
Miliki acara pengiriman aplikasi, yang dapat didengarkan oleh plugin. Setelah menerima acara yang telah dilanggani, sebuah plugin akan mencegat aliran program dan melakukan operasi yang diperlukan.
Misalnya, plugin galeri jQuery Fotorama mengimplementasikan beberapa acara . Sebagai contoh, inilah bagian dari show
metodenya yang memecat fotorama:show
acara tersebut.
that.show = function (options) {
// ... [show the new frame]
// [fire the event]
options.reset || triggerEvent('show', {
user: options.user,
time: time
});
// ... [do lots of other stuff with navigation bars, etc.]
};
Sebuah skrip dapat mendengarkan acara ini dan melakukan sesuatu ketika terjadi:
$('.fotorama').on(
'fotorama:show',
function (e, fotorama, extra) {
console.log(e.type + (extra.user ? ' after user’s touch' : ''));
console.log('transition duration: ' + extra.time);
}
);
PERTANYAAN
Apakah ada cara utama lain untuk menerapkan perilaku plugin semacam itu?
Jika tidak, kapan harus menggunakan kait, dan kapan harus menggunakan acara? Mempertimbangkan tujuan akhir adalah membuat kode lebih mudah dikelola dan dibaca, baik dari perspektif aplikasi maupun pengembang plugin?