2009-06-20 78 views
1

我有2個'庫',我需要包括在同一頁上。簡單的機器論壇和Wordpress。從2個不同的函數庫中的函數名衝突

然而,兩者都具有相互衝突的函數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()。

回答

2

我相信你沒有太多的選擇,只能重命名該函數,或者圍繞一個類來包裝所有函數。這就是PHP < = 5的問題。*:沒有命名空間,開發人員通常喜歡編寫一個充滿鬆散函數的腳本,而不是使用面向對象的方法。

1

我會咬人的手動重命名每個函數調用小圖書館(我猜這將是論壇之一)。祝你好運。

0

一種可能性是使用PHP 5.3,它支持命名空間。我不知道實現的細節,但它應該應該使您能夠將庫封裝在不同的名稱空間中。

不幸的是5.3仍然沒有達到穩定版本。如果你不能/不想使用它,我看到的不涉及重命名的唯一選擇是這樣的:創建單獨的兩個PHP腳本,在不同的解釋器中啓動它們,並讓它們以某種方式進行通信(一個管道,套接字,臨時文件)。

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 ;) 

好像它不是總需要...有一點是煩人,我會記得要刪除此當我每一次升級,雖然...

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); 
} 
+0

這對於將來有這個問題的人來說不是一個壞主意。謝謝 – 2009-06-20 01:30:08