php中来自2个不同库的函数名冲突

php中来自2个不同库的函数名冲突,php,function,Php,Function,我有两个“库”,我需要在同一页上包括它们。简单的机器论坛和Wordpress 但是,两者的函数都是_admin(),相互冲突 Fatal error: Cannot redeclare is_admin() (previously declared in /home/site.com/wordpress/wp-includes/query.php:100)in /home/site.com/smf/Sources/Security.php on line 82) 最好的办法是什么?因为我不想修

我有两个“库”,我需要在同一页上包括它们。简单的机器论坛和Wordpress

但是,两者的函数都是_admin(),相互冲突

Fatal error: Cannot redeclare is_admin() (previously declared
in /home/site.com/wordpress/wp-includes/query.php:100)in /home/site.com/smf/Sources/Security.php on line 82)

最好的办法是什么?因为我不想修改对一个库的所有调用,例如,是\u admin2()。

我相信您没有太多选择,只能重命名函数或将所有函数包装在一个类中。这就是PHP的问题所在,我相信您没有太多的选择,只能重命名函数,或者将所有函数封装在一个类中。这就是PHP的问题所在我会咬紧牙关,为较小的库手动重命名每个函数调用(我猜这将是一个)。祝你好运。

我会咬紧牙关,为较小的库手动重命名每个函数调用(我猜这将是一个)。祝你好运。

可以使用PHP5.3,它提供了对名称空间的支持。我不知道实现的细节,但它应该使您能够将库包装在不同的名称空间中


不幸的是,5.3仍然没有达到稳定的版本。如果您不能/不想使用它,我看到的唯一不涉及重命名的选项是:创建两个单独的PHP脚本,在不同的解释器中启动它们,并让它们以某种方式通信(管道、套接字、临时文件)。

一种可能是使用PHP5.3,它支持名称空间。我不知道实现的细节,但它应该使您能够将库包装在不同的名称空间中


不幸的是,5.3仍然没有达到稳定的版本。如果您不能/不想使用它,我看到的唯一不涉及重命名的选项是:创建两个单独的PHP脚本,在不同的解释器中启动它们,并让它们以某种方式通信(管道、套接字、临时文件)。

幸运的是,这是在简单机器论坛的is_admin删除中找到的评论

// Grudge chickens out and puts this in for combatibility. This will be ripped out on day one for SMF 1.2 though ;)

看来反正也不需要了。。。有一点令人担忧的是,每次升级时,我都必须记住删除这个…

幸运的是,这是在简单的机器论坛上对is_admin的删除中发现的评论

// Grudge chickens out and puts this in for combatibility. This will be ripped out on day one for SMF 1.2 though ;)

看来反正也不需要了。。。有一点令人担忧的是,每次升级时,我都必须记住删除它。

将函数重命名为
is\u admin\u wp()
is\u admin\u smf()
。然后,定义自己的
is_admin()
函数。这可能只是一个简单的包装:

function is_admin() {
    // from what function is_admin was called?
    list (, $last) = debug_backtrace();
    if (strpos($last['file'], 'wordpress') >= 0) {
        $fn = 'is_admin_wp';
    } else {
        $fn = 'is_admin_smf';
    }
    $args = func_get_args();
    return call_user_func_array($fn, $args);
}

将函数重命名为
is\u admin\u wp()
is\u admin\u smf()
。然后,定义自己的
is_admin()
函数。这可能只是一个简单的包装:

function is_admin() {
    // from what function is_admin was called?
    list (, $last) = debug_backtrace();
    if (strpos($last['file'], 'wordpress') >= 0) {
        $fn = 'is_admin_wp';
    } else {
        $fn = 'is_admin_smf';
    }
    $args = func_get_args();
    return call_user_func_array($fn, $args);
}

对于将来有这个问题的人来说,这不是一个坏主意。谢谢这对将来有这个问题的人来说是个不错的主意。谢谢