Saya terbiasa menggunakan module_exists
modul, dan menggunakannya dalam situasi seperti:
- Aktifkan beberapa fungsi tambahan dalam sebuah modul, asalkan beberapa modul lain juga tersedia di situs. The Reservasi: Email modul berisi contoh (sebenarnya ada banyak contoh ini), seperti yang ditunjukkan dalam nya sumber modul : untuk menggunakan token (dalam tubuh eMail) mensyaratkan bahwa Token modul diaktifkan.
- Terapkan dependensi modul dalam sebuah tema, seperti yang ditunjukkan pada jawaban untuk " Bagaimana menerapkan dependensi modul dalam tema dan paket modul dengan tema? ".
Namun, ada juga function_exists
, seperti yang ditunjukkan dalam jawaban untuk " Apakah mungkin untuk mendeklarasikan ketergantungan perpustakaan Javascript di Hook.info? ".
Saya memiliki kesan bahwa menggunakan function_exists
adalah pendekatan yang lebih kuat (aman) dibandingkan dengan module_exists
. Terutama jika Anda ingin memastikan bahwa beberapa fungsi (ditambahkan dalam versi modul yang lebih baru) tersedia, sedangkan dengan hanya menggunakan module_exists
, Anda berisiko mengalami kesalahan seperti:
- jika sebuah situs adalah masih menggunakan tua versi modul, yang tidak memiliki fungsi belum (sehingga Anda tidak harus mencoba untuk menggunakannya belum ).
- jika situs sudah menggunakan versi baru modul, yang tidak memiliki fungsi itu lagi (jadi Anda tidak harus mencoba menggunakannya lagi ).
Pertanyaan saya : apa kriteria khas, atau pro / kontra, untuk memutuskan untuk menggunakan module_exists
versus function_exists
?
sumber
MODULENAME_requirements
pos yang ditautkan? Ya, itu akan lebih masuk akal sebagai panggilan untukmodule_exists
. Seperti yang disebutkan MPD, cara tingkat tinggi / lebih abstrak untuk memastikan bahwa dependensi memiliki fungsi tertentu adalah memeriksa kode untuk rilis, dan membuat kode Anda bergantung pada versi spesifik yang Anda tahu kode Anda berfungsi. Sama seperti Composer / NPM / Bundler / etc melakukannyaAnda benar,
function_exists
adalah cara yang lebih kuat untuk memeriksa keberadaan fungsi API yang disediakan oleh modul contrib. Sangat cocok untuk langsung menggunakan API modul contrib.Saya menggunakan API Sesi Cache sebagai contoh:
Namun, beberapa modul contrib hanya menyediakan beberapa properti atau fitur tambahan, sangat sulit untuk mengatakan fungsi dependennya. Dalam hal ini, Anda harus menggunakan
module_exists
Saya menggunakan Elemen sebagai contoh:
sumber
session_cache_set
disediakan oleh drupal.org/project/session_cache atau modul lain, dan karenanya melakukan apa yang Anda inginkan?function_exists
dapat mencegah kesalahan fungsi yang tidak terdefinisi ketika modul contrib mengubah API setelah pembaruan. Tentu saja, metode jaminan paling banyak adalah wrapfunction_exists
denganmodule_exits
seperti yang disebutkan @Clive, tapi, bagi saya, itu terlalu membosankan.function_exits
memang mencegah situs dari sepenuhnya menengahi ...3 jawaban (menarik) sebelumnya tampak pada saya sebagai entah bagaimana mengkonfirmasikan "persepsi" saya (seperti yang saya jelaskan dalam pertanyaan saya). Yang cukup menarik, jawaban-jawaban itu awalnya ditulis independen satu sama lain (mereka diposting pada saat yang kurang lebih sama, seperti yang diilustrasikan dalam timeline pertanyaan ini , gunakan "format beralih" untuk melihat "menit").
Jawaban Jimmy Ko (+ komentar di bawahnya), mengilustrasikan beberapa contoh lebih lanjut tentang bagaimana menggunakan
function_exists
dapat membuat modul lebih kuat sehubungan dengan kemungkinan perubahan dalam beberapa modul lain yang menggunakan modul (tergantung pada).Jawaban Clive menunjukkan Anda bisa juga menggabungkan
module_exists
danfunction_exists
, sementara komentar di bawah ini menyelesaikan keraguan saya tentangfunction_exists
contoh saya (yaitu lebih baik harus menggunakanmodule_exists
).Jawaban mpdonadio (+ komentar di bawahnya), setidaknya bagi saya, yang paling sulit dicerna. Tetapi setelah meninjau komentar Shawn Conn di bawahnya, saya menemukan beberapa tautan lagi yang memberikan rincian lebih lanjut tentang semua ini, yaitu:
"Kesimpulan saya" (setelah mencerna jawaban sebelumnya): Serahkan ke inti Drupal untuk digunakan
function_exists
, dan modul kontribusi / kustom harus berusaha, sebisa mungkin, untuk tetap berpegang padamodule_exists
... meskipun ada pengecualian ...sumber