2013-01-14 39 views
5

我正在研究一個包含兩個組件的項目:在同一臺服務器上的兩個PHP應用程序之間的通信?

1)一個是CodeIgniter框架,我將在其中構建所有自定義代碼。

2)另一個是亞馬遜的MWS API的PHP SDK庫。

問題是,我的CodeIgniter代碼和Amazon的SDK都需要自己的自動加載()。

亞馬遜的SDK也進一步拆分爲3-4個組件,每個組件都有自己的自動加載功能,所以如果你想使用產品的SDK,然後在同一個會話中使用報告SDK,你會遇到已經定義的自動加載功能。

因爲這個原因,我正在考慮建立一個Web服務系統,用於我自己的代碼和Amazon的SDK文件之間的通信,即使它們在同一臺服務器上,但至少這樣的命名衝突可以避免。 I.e我會發送一個HTTP請求到CodeIgniter之外的文件,它將處理Amazon的SDK,並以JSON或XML返回響應。

我不認爲命名空間是一個選項,因爲我不想瀏覽SDK中的每個文件/類並添加命名空間語句。

我的問題是,是否有任何性能問題,我應該知道這種方法?除了命名空間之外,還有什麼辦法可以避免這種方法?

+0

我有一種印象是,如果圖書館使用SPL自動加載機,那麼幾個可以共存。他們都真的使用傳統的'__autoload()'功能嗎?我應該認爲,如果兩個亞馬遜套件因爲這個原因不能很好地協同工作,那麼有人會把它作爲一個bug /改進票據提出來。 – halfer

+0

@halfer我已經下載了最新的SDKS和yep,他們確實使用了遺留的'__autoload' –

+0

有多奇你不能一起使用幾個!那麼,如果一個已經不存在的話,我會爲此提出一張票。另一種方法:是否可以不加載亞馬遜和CI的自動加載器,並編寫自己的代碼將它們粘合在一起? – halfer

回答

1

它們自動加載功能,只需複製到一個單獨的文件,將其重命名,並勾起來與spl_autoload_register這樣的:

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

這是快速的,髒,把我的頭頂部;)

相關問題