讓我首先說我是一名正在學習OOP的中級PHP編程人員。我有一個網站正在運行,但我想打破我的代碼來實現更靈活的設計模式......並且因爲OOP簡直太棒了。自動加載PHP中用戶輸入所需的類
在我的原始代碼中,我使用了switch
語句來調用與用戶請求相對應的函數。
$request = (string) $_GET['fruit'];
switch ($request) {
case 'apply':
Get_Apple();
default:
Error_Not_A_Fruit();
exit;
}
這使得它非常不靈活,需要我在多個位置更改代碼以添加用戶可能請求的新選項。
我在考慮將其更改爲Polymorphic類調用。我正在使用作曲家,所以我已經將我的Objects設置爲自動加載PSR-4標準。因此,答案似乎很簡單,如果用戶請求的是「蘋果,」我可以創建
$request = (string) $_GET['fruit'];
$product = new Product\$request;
但是,如果用戶手動輸入不存在......說什麼「橙」我用什麼方法會用白名單列出用戶的輸入?就像我說的,這是我第一次參與面向對象開發,並且很樂意提供你們使用的設計標準。我正在考慮將塊封裝在塊內,但是它應該怎麼做?
任何建議,將不勝感激:)
乾杯, 德尼羅
更新:我想說得清楚,因爲它可能沒有之前。我正在尋找這樣的方法,以便可以添加新的子類產品對象(實現產品接口)。這樣我就可以添加不同的產品類型,而無需隨時更改代碼。
感謝您的快速反應。這是一個可以接受的做法嗎?這不會清理任何輸入。如果他們猜測可能有一個名爲「Product \ Apple \ Red」的類,那麼就會運行。我可能並不清楚,我正在尋找一個設計原則,因爲我讀過的書都沒有清楚說明實現。 – Niro
那麼,你通過一個正則表達式來過濾輸入,或者其他東西,以確保它包含一個有效的標識符。 我不確定你想在這裏完成什麼,那麼怎麼會有一個模式?如果你指的是MVC風格的URL可以轉化爲初始化的某些控制器,那麼它與file_exists等文件系統功能有很大關係,而不僅僅依靠自動加載。 – AlexanderMP