Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/243.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 为什么我们需要功能_存在?_Php_Wordpress - Fatal编程技术网

Php 为什么我们需要功能_存在?

Php 为什么我们需要功能_存在?,php,wordpress,Php,Wordpress,为什么我们需要检查用户定义函数的函数_存在?内部或核心PHP函数看起来不错,但若用户自己知道并定义了一个函数,那个么为什么需要检查它的存在呢 下面是自定义的用户定义函数 if( !function_exists( 'bia_register_menu' ) ) { function bia_register_menu() { register_nav_menu('primary-menu', __('Primary Menu')); } add_actio

为什么我们需要检查用户定义函数的函数_存在?内部或核心PHP函数看起来不错,但若用户自己知道并定义了一个函数,那个么为什么需要检查它的存在呢

下面是自定义的用户定义函数

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

感谢使用自动加载程序动态加载的文件,包含函数或类的文件可能没有加载,因此您需要检查它是否存在,因为WordPress的设计非常糟糕,没有任何适当的自动加载模块机制,因此,您需要添加保护措施。

想象一下,您使用自己的URL获取函数名并调用它。 那么我们有以下信息:

网址:

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

implode('_', $myUrlPart); //my_page
输出为字符串形式的“我的页面”。但如果您立即调用此函数,而函数不存在,则会显示错误。这就是函数_存在的地方,请看:

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

这会使它更清晰吗?

以确保不会两次注册相同的函数,这将导致错误

调用插件中定义的函数时,还可以使用
if(function\u exists('function\u name'))
。如果您停用了插件,您的站点仍将正常运行。

在Wordpress StackExchange上澄清了为什么您有时应该在主题中的函数声明周围使用

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

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


然而,我仍然怀疑插件中的函数声明是否需要它。

因为如果您尝试定义它两次,您将得到一个error@MarkBaker这就是这个问题的答案,我相信没有那么多“设计拙劣”(尽管在某些地方是这样),更像是“最初是为不能自动完成这类工作的旧PHP版本设计的,从未进行过重构以赶上现代最佳实践”。如果我注册了两次某个函数(在同一个插件或主题中)为了注意并纠正明显的设计缺陷,我不希望出现错误吗?不,WordPress允许您覆盖某些函数,例如,如果您正在制作一个子主题()。