我正在用MVC設計製作一個簡單的PHP應用程序。所有的請求都被髮送到index.php
,然後路由到適當的控制器。因爲所有的請求都經過index.php
,所以我想在那裏創建一些對象並且能夠全局使用它們,而不管哪個控制器處理請求。即,這些對象是User
,ErrorHandler
和Database
類型。在PHP中取消對全局關鍵字的需求
具有全局User
類,例如,允許任何控制器檢查用戶是否通過檢查$user->loggedIn
(或類似的東西),其中$user
在index.php
實例登錄。
以下是我在代碼中我描述:
// index.php:
<?php
include('lib/User.php');
$user = new User();
// other stuff that index.php needs to do, perhaps route to FooController
?>
// FooController.php:
<?php
class FooController {
function __construct() {
global $user;
if ($user->loggedIn) {
// do whatever
}
}
}
?>
這只是隨機碼我剛剛輸入了這麼請原諒任何愚蠢的錯誤 - 但我希望你的想法。此代碼將起作用,但global $user;
行必須包含在FooController.php
內的每個函數中。
這會招人煩的時候每個函數必須有三個global
語句,一個用於User
,ErrorHandler
和Database
。有沒有更好的方式去做這件事,同時保留我的MVC設計?
你可以使用幾種模式來實現這一點。例如,看看Singleton,Multiton和Registry模式。最後一個可能是您替換全局變量的最佳選擇。 – Macmade
爲什麼不將$ user傳遞給控制器的構造函數? – CodeZombie
FooController類擴展用戶{...? –