在PHP中實現一個所謂的MVC框架非常簡單。這裡說一下思路。
一、首先用spl_autoload_register函數實現自己的類型自動加載機制。這樣其他代碼都不需要再考慮如何將類所在的文件include進來。
二、從url中提取出controller和action的名稱,組織起來用反射實例化控制器類,並調用控制器的execute方法。控制器的execute方法同樣也會用反射查找action方法並調用,將action返回的response對象寫入到輸出流中。如果controller或action不存在時則返回404狀態。
三、要實現視圖,首先要定義一個view類,它將另外一個php視圖文件include到一個方法裡,這樣可以限制被包含文件中變量的作用域。其次view類會有一個$model屬性,用它來和被包含的php共享數據模型,這樣我們就能輕松地在視圖中呈現數據了。當然還可以用ob_start、ob_get_contents、ob_end_clean這幾個函數來“捕獲”視圖呈現的內容。
四、接第二步,如果想呈現一個視圖,那麼就在action中返回一個ViewResponse,想輸出一段json數據,就返回一個JsonResponse,框架提供一個基類ActionResponse,不管它的派生類是什麼框架只需要將它生成的內容寫入到輸出中。
實際使用的時候需要注意一下安全和性能的問題。