簡體   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