我有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(),例如。
答案 0 :(得分:2)
我相信你没有太多的选择,只能重命名函数,或者围绕一个类包装所有函数。这是PHP的问题< = 5. *:没有名称空间,开发人员通常更喜欢编写一个充满松散函数的脚本,而不是使用面向对象的方法。
答案 1 :(得分:1)
我会咬住子弹手动重命名为较小的库的每个函数调用(我猜这将是论坛之一)。祝你好运。
答案 2 :(得分:1)
将功能重命名为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);
}
答案 3 :(得分:0)
一种可能性是使用PHP 5.3,它支持命名空间。我不知道实现的细节,但它应该使您能够将库包装在不同的命名空间中。
不幸的是5.3仍未达到稳定版本。如果您不能/不想使用它,我看到的唯一不涉及重命名的选项是:创建单独的两个PHP脚本,在不同的解释器中启动它们,并让它们以某种方式进行通信(管道, socket,tempfile)。
答案 4 :(得分:0)
幸运的是,这是简单机器论坛中is_admin的删除中发现的评论。
// Grudge chickens out and puts this in for combatibility. This will be ripped out on day one for SMF 1.2 though ;)
似乎不需要它...有点烦人的是,我每次升级时都必须记住删除它...