2009-06-20 6 views
1

J'ai 2 'bibliothèques' que j'ai besoin d'inclure sur la même page. Forums machine simples et Wordpress.Conflit de nom de fonction dans php de 2 bibliothèques différentes

Cependant les deux ont la fonction is_admin() qui est en conflit l'un avec l'autre.

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) 

Quel serait le meilleur moyen de le contourner? Comme je ne veux pas avoir à modifier tous les appels à une bibliothèque pour être is_admin2() par exemple.

Répondre

2

Je crois que vous n'avez pas trop le choix mais pour renommer la fonction ou, envelopper toutes les fonctions autour d'une classe. C'est le problème avec PHP < = 5. *: pas d'espaces de noms, et les développeurs préfèrent souvent écrire un script plein de fonctions lâches, que d'utiliser une approche orientée objet.

1

Je voudrais mordre la balle manuellement renommer chaque appel de fonction pour la bibliothèque plus petite (je suppose que ce serait le forum). Bonne chance.

0

Une possibilité serait d'utiliser PHP 5.3, qui prend en charge les espaces de noms. Je ne connais pas les détails de l'implémentation mais devrait vous permettre d'envelopper les bibliothèques dans différents espaces de noms.

Malheureusement, la version stable n'est toujours pas atteinte. Si vous ne pouvez pas/ne voulez pas l'utiliser, la seule option que je vois qui n'implique pas de renommer serait ceci: créer deux scripts PHP séparés, les lancer dans différents interpréteurs, et les faire communiquer d'une manière ou d'une autre (un tuyau, socket, fichier temporaire).

0

Heureusement pour moi, c'était le commentaire trouvé dans la déconnexion de is_admin dans Simple Machine Forums.

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

Semble ce ne est pas nécessaire de toute façon ... Un peu anoying que je vais devoir penser à retirer quand je mets à jour chaque fois que ...

1

Renommer les fonctions is_admin_wp() et is_admin_smf(). Ensuite, définissez votre propre fonction is_admin(). Cela pourrait être juste un emballage simple:

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

Ce n'est pas une mauvaise idée pour les personnes ayant ce problème dans le futur. Merci –

Questions connexes