我有很多用PHP編寫的遺留代碼,它不是寫在任何特定的框架上,而是大部分是老派風格(即內聯)的PHP。但是,我的大部分新代碼都是在Kohana 3.1.X框架中編寫的。雖然Kohana確實允許遺留代碼和Kohana文件在同一個Web站點上共存,但我想現在將每個遺留代碼文件作爲視圖進行合併,並充分利用Kohana的MVC設計模式和URL重寫功能。然而,我的遺留代碼無法訪問在視圖本身內定義的全局變量(即遺留代碼),並且無法利用嘗試通過全局範圍語句查看這些全局變量的內聯函數時遇到問題。例如:如何在Kohana中包裝PHP遺留代碼?
應用/視圖/ legacy.php
$gvar = 5;
function getadminsettings(){
global $gvar;
echo $gvar;
}
應用/類/控制器/ myctrl.php
...
public function action_legacy() {
// call legacy.php as a view via View::factory()
}
...
由於我有這麼多遺留代碼,是不切實際的重構所有這些遺留代碼文件都是真實的視圖。我該如何將這些文件視爲視圖或將它們作爲視圖來訪問,以便我可以從現在起將控制器中的邏輯寫入而不是內聯(從而遵循真正的MVC設計模式),然後將變量到這些遺留文件?
我看過In PHP, how can I wrap procedural code in a class?但這篇文章在這種情況下並不真正起作用,因爲我正在處理Kohana框架。
更新:
的Kohana似乎使用的輸出緩衝器,這就是爲什麼它是無法在傳統的文件來訪問這些全局變量。有沒有人成功獲取Kohana 3.2中的視圖來訪問全局變量?
是的,我想到的是,舊代碼將繼續定期進行維護,但我想限制數量變爲遺留代碼庫。 – Matthew
@Matthew:在這種情況下,我認爲需要一個完整的重構。試圖包裝現有的代碼最多隻會變得脆弱,在最糟糕的情況下難以維護,令人難以置信。 –
我一直在探索使用cURL調用通過創建一個特殊的類而不是使用View :: factory()方法來訪問這些腳本的想法,但我不想在服務器上添加更多的負載。你認爲這可能有用嗎? – Matthew