我對控制器的使用有一些困惑。像通常一樣,路由器(調度器或前端控制器)在控制器類中調用一些靜態方法,例如PageController :: showIndexPage()。我的控制器通常有幾行代碼,這是通常的模型加載,獲取數據並傳遞給查看。PHP - 類中的靜態方法或只是一個函數
我的問題是 - 因爲每個http請求只執行一個方法,我應該避免類,只是爲控制器創建一個函數?有時,我真的有每個控制器有幾個方法,但每次只有一種方法正在使用。我知道這不是什麼大不了的事情,但也許我可以得到更好的系統?下面是一個例子:我的AuthController有類似showLoginPage(),doLogin(),doLogout()等方法。所以,避免使用類也許是個好主意,並且把這個控制器作爲幾個函數寫在分開的文件eq auth/show_login_page中。 PHP,auth/do_login.php等?這個概念是否有一些優點/缺點?
更新:因爲有些用戶膨脹我的靜態方法的使用,我必須防禦:)我不創建控制器的實例,因爲沒有必要這樣做。在99%的情況下,控制器僅用於將數據從模型傳遞到視圖。而且,只有一個方法調用不需要創建實例。這就是爲什麼方法是靜態的。這裏是我的例子控制器之一:
class ArticlesController {
static function showArticle($article_id) {
$article = ArticlesModel::getArticleById($article_id);
View::getInstance()->assignByRef("article", $article);
View::getInstance()->display("articles/one.tpl");
}
static function showAllArticles() {
$articles = ArticlesModel::getAllArticles();
View::getInstance()->assignByRef("articles", $articles);
View::getInstance()->display("articles/all.tpl");
}
}
您可以將所有東西放在全局函數中,使它們屬於相同的前綴。就像你所說的那樣,它是一樣的「有點」命名空間。只是指出,因爲靜態類功能相當有限,你應該明智地使用它們,而不是一般的MVC模式恕我直言。 – hakre
我覺得靜態類函數在幫助將全局函數分離到邏輯位置方面更加方便,它還允許自動加載函數和全局變量,而不是爲所有函數創建一個大文件,或者需要手動加載每個函數文件。 – Anther