Mengapa menggunakan function_exists?


30

Saya perhatikan banyak pengembang tema WordPress akan menggunakan ini di functions.php

if (function_exists('register_nav_menus')) {
    register_nav_menus (array('primary' => 'Header Navigation'));
}

Bagi saya, saya selalu menggunakan add_action untuk setiap fungsi yang saya gunakan di functions.php

Jadi, di atas akan ditulis sebagai:

add_action('init', 'my_register_nav_menus');

function my_register_nav_menus() {
    register_nav_menus (array('primary' => 'Header Navigation'));
}

Saya punya dua pertanyaan:

  1. Mengapa menggunakan pernyataan if dalam metode pertama?

  2. Mana yang benar?

Jawaban:


35

Memeriksa untuk melihat apakah ada built-in fungsi WordPress sebelum memanggil mereka adalah untuk kompatibilitas mundur yang IMHO tidak diperlukan.

Jadi jika Anda melihat if ( function_exists( 'register_nav_menus' ) )penulis tema mendukung versi lebih awal dari 3.0.

Anda masih terkadang melihat if ( function_exists( 'dynamic_sidebar' ) )mengapa? Saya tidak bisa memberi tahu Anda karena dynamic_sidebar diperkenalkan pada 2.2.

Alasan lain untuk menggunakannya adalah untuk membuat tema atau plugin Anda bisa digunakan. Fungsi pluggable adalah fungsi yang dapat ditimpa dalam tema anak atau plugin lain.

Ini dilakukan pada definisi bukan panggilan dan Anda menggunakan! operator untuk memastikan itu belum ada sebelum Anda mendefinisikannya.

if ( ! function_exists( 'my_awesome_function' ) ) {
/**
 * My Awesome function is awesome
 *
 * @param array $args
 * @return array
 */
function my_awesome_function( $args ) {
  //function stuff
  return array();
  }
}

Ketika ini selesai, tema anak atau plugin lain dapat menimpa fungsi itu dengan miliknya sendiri.


9

The function_existsFungsi bukanlah cara lain untuk memuat fungsi seperti add_actionuntuk memeriksa kode Anda untuk melihat bahwa tidak ada fungsi lain dengan nama yang sama sehingga tidak akan memecahkan kode Anda. Dari php.net:

Memeriksa daftar fungsi-fungsi yang ditentukan, baik bawaan (internal) dan yang ditentukan pengguna, untuk function_name.

Jika Anda memiliki fungsi yang sama dua kali dalam kode Anda itu akan rusak, itu sebabnya Anda awali fungsi Anda dengan sesuatu yang lain daripada wp_.

Baca lebih lanjut: http://php.net/manual/en/function.function-exists.php


0

Anda dapat menggunakan http://php.net/function_exists

if(function_exists('my_function')){
   // my_function is defined
}

ATAU jika Anda ingin melihat semua fungsi tersedia, jadi Anda juga mencetak semua,

echo "<pre>"; print_r(get_defined_functions());

cetak pada halaman dan Anda dapat mencari fungsi itu jika tidak ditemukan pada daftar berarti itu tidak tersedia untuk digunakan.

Anda mungkin perlu mengaktifkan ekstensi untuk perpustakaan tertentu.


0

php.net mendefinisikan ini sebagai

(PHP 4, PHP 5, PHP 7) function_exists - Return TRUE jika fungsi yang diberikan telah ditentukan

Saya harus setuju dengan Michelle dalam penggunaan karena Anda [sh] hanya boleh menggunakan cek untuk sesuatu yang mirip dengan pengecekan tipe pemain; jadi Anda akan mencari apakah ada fungsi (pada halaman itu atau dari apa pun yang disebut pada halaman / file referensi) sehingga Anda akan tahu apakah aman untuk menjalankan fungsi lain atau parsing beberapa templat HTML mungkin.

Seperti yang disebutkan seseorang, ini biasanya digunakan untuk memeriksa apakah file / tema Anda (menggunakan WordPress) dapat menjalankan permintaan yang Anda butuhkan. Saya telah menggunakannya untuk memeriksa apakah tema memiliki bagian templat tertentu.

if ( function_exists( 'register_sidebar' ) ) { get_sidebar(); }


0

function_exists harus digunakan setelah nama fungsi dalam suatu tema bukan sebelumnya.

add_action( 'loop_start', 'add_slider' );

function add_slider() {

if ( function_exists( 'soliloquy' ) ) { 

soliloquy( 'slider', 'slug' ); 

    }

}

Ini memeriksa untuk memastikan plugin aktif sebelum mengeluarkan fungsi dan / atau markup jika tidak Anda mungkin mendapatkan kesalahan seperti panggilan ke fungsi yang tidak ditentukan.

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.