2009-06-20 9 views
1

Ich habe 2 'Bibliotheken', die ich auf der gleichen Seite enthalten muss. Einfache Maschinenforen und Wordpress.Funktion Name Konflikt in PHP aus 2 verschiedenen Bibliotheken

Beide haben jedoch die Funktion is_admin(), die miteinander in Konflikt steht.

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) 

Was wäre der beste Weg, um dies zu umgehen? Da ich nicht alle Aufrufe zu einer Bibliothek ändern möchte, um zum Beispiel is_admin2() zu sein.

Antwort

2

Ich glaube, Sie haben nicht zu viel Auswahl, aber die Funktion umzubenennen oder alle Funktionen um eine Klasse zu wickeln. Das ist das Problem mit PHP < = 5. *: keine Namespaces, und Entwickler bevorzugen oft ein Skript voller loser Funktionen zu schreiben, als einen objektorientierten Ansatz zu verwenden.

1

Ich würde den Kugelhieb manuell jeden Funktionsaufruf für die kleinere Bibliothek umbenennen (ich vermute, das wäre das Forum). Viel Glück.

0

Eine Möglichkeit wäre PHP 5.3, die Unterstützung für Namespaces bringt. Ich kenne nicht die Details der Implementierung, aber es sollte ermöglichen Sie die Bibliotheken in verschiedenen Namespaces zu umbrechen.

Leider hat 5.3 die stabile Version immer noch nicht getroffen. Wenn Sie es nicht benutzen können/wollen, ist die einzige Option, die ich nicht umbenennen muss: zwei separate PHP-Skripte erstellen, sie in verschiedenen Interpretern starten und sie irgendwie kommunizieren lassen (eine Pipe, Socket, Tempdatei).

0

Glücklicherweise war dies der Kommentar in der Erklärung von is_admin in 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 ;) 

scheint seine ohnehin nicht benötigt ... Ein wenig ärgerlich, dass ich muss daran denken, diese zu entfernen, wenn ich jedes Mal, wenn ein Upgrade ...

1

die Funktionen Umbenennen zu is_admin_wp() und is_admin_smf(). Definieren Sie dann Ihre eigene is_admin() Funktion. Dies könnte nur ein einfacher Wrapper sein:

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

Das ist keine schlechte Idee für Leute mit diesem Problem in der Zukunft. Vielen Dank –

Verwandte Themen