2013-01-14 17 views
5

pracuję nad projektem, który ma dwie składowe:Komunikacja między dwiema aplikacjami PHP na tym samym serwerze?

1) Jednym z nich jest framework CodeIgniter w której będę budować wszystko od mojego kodu niestandardowego.

2) Drugi to biblioteki PHP SDK dla MWS Amazon API.

Problem jest zarówno mojego kodu CodeIgniter i SDK Amazon wymagają własnego autoload().

Pakiet SDK Amazon jest dodatkowo podzielony na 3-4 komponenty, z których każdy ma własną funkcję automatycznego ładowania, więc jeśli chcesz pracować z pakietem SDK produktów, a następnie z pakietem raportów SDK w tej samej sesji, natkniesz się na już zdefiniowana funkcja automatycznego ładowania.

Z tego powodu zastanawiam się nad skonfigurowaniem systemu usług internetowych do komunikacji między moim własnym kodem a plikami SDK Amazon, nawet jeśli są one na tym samym serwerze, ale przynajmniej w ten sposób mogą wystąpić konflikty nazewnictwa. unikany. Tj wyślę żądanie HTTP do pliku zewnętrznego CodeIgniter, który zajmie się SDK Amazona i zwraca odpowiedź w JSON lub XML.

Nie sądzę, przestrzenie nazw są możliwe, ponieważ nie chcę, aby przejść przez każdego pliku/klasa w SDK i dodać oświadczenia nazw.

Moje pytanie brzmi, czy są jakieś problemy z wydajnością z tym sposobem, że powinienem być świadomy? Czy jest jakaś przestrzeń poza przestrzeniami nazw, której można by uniknąć?

+0

I było pod wrażeniem, że jeśli biblioteki używają autoloaderów SPL, to kilka z nich może współistnieć razem. Czy wszyscy naprawdę korzystają ze starej funkcji '__autoload()'? Powinienem pomyśleć, że jeśli dwa pakiety Amazon nie będą dobrze współpracować z tego powodu, to ktoś podniósłby je jako bilet błędu/ulepszenia. – halfer

+0

@halfer Pobrałem najnowsze SDKS i tak, używają dziedzictwa '__autoload' –

+0

Jak dziwne, że nie możesz użyć kilku razem! Cóż, podniosę bilet na ten temat, jeśli już nie istnieje. Inne podejście: czy nie można załadować autoloaderów dla Amazon i CI i napisać własne, aby skleić to wszystko razem? – halfer

Odpowiedz

1

Wystarczy skopiować swoje funkcje AutoLoader do osobnego pliku, zmień je i podłączyć je z spl_autoload_register tak:

<?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'); 

Jest to szybkie, brudne i poza czubek głowy;)

Powiązane problemy