为什么我们需要function_exists?

时间:2013-01-29 13:13:35

标签: php wordpress

为什么我们需要检查用户定义函数的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');
}

由于

5 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

url:http://mysite.com/my/page/

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

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
}

这会让它更清晰吗?

答案 3 :(得分:0)

Wordpress StackExchange上的

This answer阐明了为什么有时会在主题中的函数声明周围使用if function_exists

  

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

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

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

答案 4 :(得分:-1)

因为WordPress设计得很差,所以没有任何适当的机制来自动加载这样的模块,所以你需要添加安全措施。