4

为什么我们需要为用户定义的函数检查 function_exists?它对于内部或核心 PHP 函数看起来没问题,但如果用户自己知道并定义了一个函数,那么为什么需要检查它的存在呢?

下面是自定义用户定义的功能

if( !function_exists( 'bia_register_menu' ) ) {
    function bia_register_menu() {
        register_nav_menu('primary-menu', __('Primary Menu'));
    }
    add_action('init', 'bia_register_menu');
}

谢谢

4

5 回答 5

3

确保您不会两次注册相同的功能,这将导致错误。

您还可以if(function_exists('function_name'))在调用插件中定义的函数时使用。如果您停用了插件,您的网站仍然可以正常运行。

于 2013-01-29T13:37:11.140 回答
1

在使用自动加载器动态加载的文件中,包含函数或类的文件可能尚未加载,因此您需要检查它是否存在

于 2013-01-29T13:25:07.223 回答
0

Wordpress StackExchange 上的这个答案阐明了为什么有时应该在主题if function_exists中使用函数声明:

if function_exists 方法允许子主题通过简单地定义函数本身来覆盖函数定义。由于子主题的functions.php文件首先加载,因此它们将首先定义函数,并且不会加载父主题的定义。

我想它类似于protected面向对象语言中的关键字。

但是我仍然想知道插件中的函数声明是否需要它。

于 2014-01-03T17:03:59.083 回答
0

想象一下,您使用您的 URL 来获取函数名称并调用它。然后我们有以下信息:

网址: http: //mysite.com/my/page/

将此 url 转换为函数名称时,您将执行以下操作:

implode('_', $myUrlPart); //my_page

输出将是“my_page”作为字符串。但是如果你立即调用它并且该函数不存在,则会显示错误。这就是 function_exists 的用武之地,看一下:

if (function_exists($function_name)) {
    $function_name();  //the function is called
} else {
    //call other function to show HTTP 404 page or something like that
}

这是否使它更清楚一点?

于 2013-01-29T13:27:50.687 回答
-1

因为 WordPress 的设计非常糟糕,它没有任何适当的机制来自动加载这样的模块,所以你需要添加保护措施。

于 2013-01-29T13:25:29.510 回答