繁体   English   中英

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

[英]Function name conflict in php from 2 different libraries

我有2个'库',我需要包含在同一页面上。 简单的机器论坛和Wordpress。

但是两者都具有相互冲突的函数is_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)

什么是最好的解决方法? 因为我不想将对一个库的所有调用修改为is_admin2()。

我相信你没有太多的选择,只能重命名函数或包装一个类的所有函数。 这就是PHP <= 5. *的问题:没有名称空间,开发人员通常更喜欢编写一个充满松散函数的脚本,而不是使用面向对象的方法。

我会咬住子弹手动重命名为较小的库的每个函数调用(我猜这将是论坛之一)。 祝好运。

将函数重命名为is_admin_wp()is_admin_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);
}

可能的方法是使用PHP 5.3,它支持命名空间。 我不知道实现的细节,但它应该使您能够将库包装在不同的命名空间中。

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

幸运的是,这是简单机器论坛中is_admin的删除中发现的注释。

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

似乎它不需要它...有点烦人,我必须记住在我每次升级时删除这个...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM