为什么我们需要检查用户定义函数的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');
}
由于
答案 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)
This answer阐明了为什么有时会在主题中的函数声明周围使用if function_exists
:
if function_exists方法允许子主题通过简单地定义函数本身来覆盖函数定义。由于子主题的functions.php文件首先加载,然后他们将首先定义函数,并且不会加载父的定义。
我认为它类似于面向对象语言中的protected
关键字。
但是我仍然想知道插件中的函数声明是否需要它。
答案 4 :(得分:-1)
因为WordPress设计得很差,所以没有任何适当的机制来自动加载这样的模块,所以你需要添加安全措施。