[英]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.