Зачем использовать, если function_exists?

30

Я заметил, что многие разработчики тем WordPress будут использовать это в functions.php

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

Для меня я всегда использую add_action для каждой функции, которую я использую в functions.php

Итак, вышесказанное будет записано как:

add_action('init', 'my_register_nav_menus');

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

У меня есть два вопроса:

  1. Зачем использовать оператор if в первом методе?

  2. Какой из них правильный путь?

Greeso
источник

Ответы:

35

Проверка того, существуют ли встроенные функции WordPress перед вызовом, предназначена для обратной совместимости, которая, IMHO, не нужна.

Так что, если вы видите, if ( function_exists( 'register_nav_menus' ) )автор темы поддерживает версии ранее, чем 3.0.

Вы все еще иногда видите if ( function_exists( 'dynamic_sidebar' ) )почему? Я не мог сказать вам, потому что 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();
  }
}

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

Chris_O
источник
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());

распечатайте на странице, и вы можете выполнить поиск этой функции, если ее нет в списке, значит, она недоступна для использования.

вам может потребоваться активировать расширение для конкретной библиотеки.

manish1706
источник
0

php.net определяет это как

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

Я должен согласиться с Мишель в том, что вы можете использовать проверку только для чего-то похожего на проверку типов; поэтому вы будете искать, существует ли функция (на этой странице или из всего, что вызывается на этой странице / ссылке на файл), чтобы вы знали, безопасно ли запускать другую функцию или анализировать какой-либо шаблон HTML.

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

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

tradesouthwest
источник
0

function_exists следует использовать после имени функции в теме, а не до.

add_action( 'loop_start', 'add_slider' );

function add_slider() {

if ( function_exists( 'soliloquy' ) ) { 

soliloquy( 'slider', 'slug' ); 

    }

}

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

Мишель
источник