2013-01-14 22 views
5

Ich arbeite an einem Projekt, das zwei Komponenten hat:Kommunikation zwischen zwei PHP-Anwendungen auf dem gleichen Server?

1) Eines ist das CodeIgniter-Framework, in dem ich all meinen benutzerdefinierten Code erstellen werde.

2) Das andere ist Amazons PHP SDK Bibliotheken für MWS API.

Das Problem ist, sowohl meine CodeIgniter-Code und Amazon SDK erfordern ihre eigene Autoload().

Amazon SDK ist auch weiter in 3-4 Komponenten aufgeteilt, jede von ihnen hat ihre eigene Autoload-Funktion, also wenn Sie mit Produkten SDK und dann Reports SDK in der gleichen Sitzung arbeiten möchten, würden Sie in die bereits definierte Autoload-Funktion.

Aus diesem Grund denke ich über die Einrichtung eines Web-Services-Systems für die Kommunikation zwischen meinem eigenen Code und Amazon SDK-Dateien, obwohl sie auf dem gleichen Server sind, aber zumindest so die Namenskonflikte sein können vermieden werden. Das heißt, ich sende eine HTTP-Anfrage an eine Datei außerhalb von CodeIgniter, die sich mit Amazon SDK beschäftigt und eine Antwort in JSON oder XML zurückgibt.

Ich glaube nicht, dass Namespaces eine Option sind, da ich nicht jede Datei/Klasse im SDK durchlaufen und Namespace-Anweisungen hinzufügen möchte.

Meine Frage ist, gibt es irgendwelche Leistungsprobleme mit dieser Methode, die ich beachten sollte? Und gibt es einen anderen Weg als Namespaces, dass diese Methode vermieden werden könnte?

+0

I hatte den Eindruck, dass wenn Bibliotheken SPL-Autoloader verwenden, dass mehrere koexistieren können. Verwenden sie wirklich die Legacy '__autoload()' Funktion? Ich sollte denken, dass wenn zwei Amazon-Pakete aus diesem Grund nicht gut zusammen funktionieren, dass jemand sie als Bug-/Verbesserungs-Ticket bereits erhöht hätte. – halfer

+0

@halfer Ich habe die neuesten SDKS heruntergeladen und yep, sie verwenden die Legacy '__autoload' –

+0

Wie seltsam, dass Sie nicht mehrere zusammen verwenden können! Nun, ich würde ein Ticket darüber erheben, wenn es nicht schon existiert. Ein anderer Ansatz: Ist es möglich, die Autoloader für Amazon und CI nicht zu laden und eigene zu schreiben, um alles zusammen zu kleben? – halfer

Antwort

1

Kopieren Sie einfach den Autoloader-Funktionen in einer separaten Datei, benennen Sie sie und wirft sie mit spl_autoload_register so anschließen:

<?php 
function loadFrameworkOne($name) { 
    // contents of __autoload from framework one. 
} 
function loadFrameworkTwo($name) { 
    // contents of __autoload from framework two. 
} 
spl_autoload_register('loadFrameworkOne'); 
spl_autoload_register('loadFrameworkTwo'); 

Dies ist nicht nur schnell, schmutzig und aus der Spitze von meinem Kopf;)

Verwandte Themen