Навіщо використовувати, якщо function_exists?


30

Я помітив, що багато розробників тем WordPress використовуватимуть це у function.php

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

Для мене я завжди використовую додавання для кожної функції, яку я використовую у function.php

Отже, вище було б записано як:

add_action('init', 'my_register_nav_menus');

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

У мене є два питання:

  1. Навіщо використовувати оператор if у першому методі?

  2. Який із них правильний?

Відповіді:


35

Перевірка, чи існують вбудовані в WordPress функції перед тим, як викликати їх, є зворотною сумісністю, яка IMHO не потрібна.

Тож якщо ви бачите, if ( function_exists( 'register_nav_menus' ) )що автор теми підтримує версії раніше, ніж 3.0.

Ви все ще іноді бачите if ( function_exists( 'dynamic_sidebar' ) )Чому? Я не міг вам сказати, оскільки в 2.2 було введено динамічний_сайдер.

Ще одна причина його використання - це зробити свою тему чи плагін підключеним. Функція, що підключається, - це функція, яку можна змінити в дочірній темі чи іншому плагіні.

Це робиться за визначенням не дзвінка, і ви використовуєте! оператор, щоб переконатися, що він ще не існує, перш ніж його визначити.

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();
  }
}

Коли це зроблено, дочірня тема чи інший плагін можуть замінити цю функцію на власну.


9

function_existsФункція не інший спосіб завантажити функцію , як add_actionйого для перевірки коди , щоб побачити , що немає ніякої іншої функції з тим же ім'ям , так що не порушить ваш код. З php.net:

Перевіряє список визначених функцій, як вбудованих (внутрішніх), так і визначених користувачем, на ім'я функції_фами.

Якщо у вашому коді двічі є одна і та ж функція, вона порушиться, ось чому ви префіксуєте свою функцію чимось іншим, ніж wp_.

Детальніше: http://php.net/manual/en/function.function-exists.php


0

ви можете використовувати http://php.net/function_exists

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

АБО якщо ви хочете переглянути всі доступні функції, тому ви також надрукуєте всі,

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

надрукувати на сторінці, і ви можете шукати цю функцію, якщо її немає в списку, це означає, що вона недоступна для використання.

може знадобитися активувати розширення для певної бібліотеки.


0

php.net визначає це як

(PHP 4, PHP 5, PHP 7) function_exists - поверніть TRUE, якщо задана функція була визначена

Я повинен погодитися з Мішелем у використанні в тому, що ви [sh] ould використовуєте лише чек на щось подібне до перевірки типу лиття; тож ви б шукали, чи існувала б функція (на цій сторінці або з усього, що називається на цій сторінці / посиланні на файл), тож ви знаєте, чи безпечно запустити іншу функцію або проаналізувати якийсь HTML шаблон шаблону.

Як згадував хтось, його зазвичай використовують, щоб перевірити, чи ваш файл / тема (за допомогою WordPress) здатний запустити потрібний запит. Я використовував це для перевірки, чи тема має певну частину шаблону.

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


0

function_exists слід використовувати після назви функції в темі не раніше.

add_action( 'loop_start', 'add_slider' );

function add_slider() {

if ( function_exists( 'soliloquy' ) ) { 

soliloquy( 'slider', 'slug' ); 

    }

}

Це перевіряє переконайтесь, що плагін активний перед виведенням функції та / або розмітки, інакше ви можете отримати помилку, як виклик невизначеної функції.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.