2 farklı kütüphanelerden php Fonksiyon adı çakışması

5 Cevap php

Ben aynı sayfada eklemeniz gereken 2 'kütüphaneler' var. Basit Makine Forumlar ve Wordpress.

Ancak her ikisi de birbiri ile çelişen işlevi is_admin () var.

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)

Ne Bunu aşmanın en iyi yolu olurdu? Ben Yüklü olarak (örneğin) is_admin2 gereken bir kütüphaneye tüm aramaları değiştirmek zorunda istiyorum.

5 Cevap

Ben çok fazla seçenek yok ama fonksiyonu yeniden adlandırmak ya da, bir sınıf etrafında tüm fonksiyonları sarmak için inanıyorum. Yani PHP ile sorun <= 5 *:. Hiçbir ad alanları ve geliştiriciler genellikle bir nesne yönelimli yaklaşım kullanmak daha gevşek fonksiyonları tam bir senaryo yazmak için tercih.

Ben kurşun elle (ben ki bir Forumları olacağını tahmin ediyorum) küçük kütüphane için her işlev çağrısı adlandırmak lokma olacaktır. İyi şanslar.

is_admin_wp() ve is_admin_smf() için işlevler yeniden adlandır. Sonra, kendi is_admin() fonksiyonunu tanımlar. Bu sadece basit bir sarıcı olabilir:

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

Bir olasılık ad alanları için destek getiriyor PHP 5.3, kullanmak olacaktır. Ben uygulama ayrıntılarını bilmiyorum ama should farklı ad kütüphaneleri tamamlamayı sağlar.

Ne yazık ki hala 5.3 kararlı sürümü vurmak değil. , Ayrı iki PHP komut dosyaları oluşturmak, farklı tercümanlar onları başlatmak ve onları (her nasılsa bir boru iletişim var: Eğer / kullanmak istemiyorsanız olamaz, bunu görebiliyorum tek seçenek adlandırma bu olurdu içermez soket, geçici dosya).

Luckly benim için bu Basit Makine Forumlar is_admin ilanından bulunan yorumdu.

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

Onun zaten gerekli değil gibi görünüyor ... Ben gerçi her zaman yükseltme yaptığınızda, bu kaldırmak için hatırlamak zorunda olacak Biraz anoying ...