我正在用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类扩展用户{...? –