Why use if function_exists?

时间:2013-08-23 作者:Greeso

我注意到很多WordPress主题的开发人员在functions.php

if (function_exists(\'register_nav_menus\')) {
    register_nav_menus (array(\'primary\' => \'Header Navigation\'));
}
对我来说,我总是对我正在使用的每个函数使用add\\u操作functions.php

因此,上述内容应写为:

add_action(\'init\', \'my_register_nav_menus\');

function my_register_nav_menus() {
    register_nav_menus (array(\'primary\' => \'Header Navigation\'));
}
我有两个问题:

为什么在第一个方法中使用if语句?

哪种方法正确?

5 个回复
最合适的回答,由SO网友:Chris_O 整理而成

调用前检查内置WordPress函数是否存在是为了向后兼容,IMHO不需要这样做。

所以如果你看到if ( function_exists( \'register_nav_menus\' ) ) 主题作者支持3.0之前的版本。

你有时还会看到if ( function_exists( \'dynamic_sidebar\' ) ) 为什么?我不能告诉你,因为dynamic\\u提要栏是在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();
  }
}
完成此操作后,子主题或其他插件可以使用there-own覆盖该函数。

SO网友:Pontus Abrahamsson

这个function_exists 函数不是加载函数的另一种方式,如add_action 它用于检查您的代码,以确保没有其他同名函数,从而不会破坏您的代码。来自php。净值:

检查已定义函数(内置(内部)和用户定义)列表中的function\\u name。

如果在代码中有两次相同的函数,它就会中断,这就是为什么要使用前缀Your 与wp\\u1以外的其他对象一起运行。

阅读更多:http://php.net/manual/en/function.function-exists.php

SO网友:manish1706

您可以使用http://php.net/function_exists

if(function_exists(\'my_function\')){
   // my_function is defined
}
或者,如果要查看可用的all函数,也可以打印all,

echo "<pre>"; print_r(get_defined_functions());
在页面上打印,若在列表中找不到该函数,则表示该函数不可用,则可以搜索该函数。

您可能需要激活特定库的扩展。

SO网友:Michelle

function_exists 应在主题中的函数名之后使用,而不是在之前。

add_action( \'loop_start\', \'add_slider\' );

function add_slider() {

if ( function_exists( \'soliloquy\' ) ) { 

soliloquy( \'slider\', \'slug\' ); 

    }

}
这将在输出函数和/或标记之前检查插件是否处于活动状态,否则可能会出现错误,如调用未定义的函数。

SO网友:tradesouthwest

php。net将其定义为

(PHP 4, PHP 5, PHP 7) function_exists — Return TRUE if the given function has been defined

我必须同意Michelle的用法,因为你只能使用类似于类型转换检查的检查;因此,您将查找是否存在一个函数(在该页面上或从该页面/文件引用上调用的任何内容),这样您就可以知道运行另一个函数或解析某些模板HTML是否安全。

正如有人提到的,它通常用于检查您的文件/主题(使用WordPress)是否能够运行所需的请求。我用它来检查主题是否有特定的模板部分。

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

结束

相关推荐

从外部PHP脚本调用Functions.php中的函数

Preamble<我试图确保以前没有人问过这个问题。我刚开始使用StackExchange,所以我可能没有这么做。我不介意责备;厚皮肤,我学得很快:)THE PROBLEM我编写了一个函数并将其放置在主题函数中。phpfunction serverConnect() { $serverAccess = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD); if (!$serverAccess) { die(\"