我有这个用户类
class User{
private $logged = false;
private $id;
public function User() {
//> Check if the user is logged in with a cookie-database and set $logged=true;
}
public function isLogged() {}
public function editPerms() {}
//> other methods
}
现在考虑到我不能在Where should i store the ref of my istance? 中登录超过 1 个用户(当然因为我们正在谈论单个 http 请求)。
情况如下:单例会很有用,但现在每个人都说单身人士是邪恶的(比如静态方法).
- http://misko.hevery.com/2008/08/17/singletons-are-pathological-liars/
- http://misko.hevery.com/2008/12/15/static-methods-are-death-to-testability/
我可以做一个$GLOBALS['currentUser'] = new User();
并且可以在任何地方访问它,但我认为这比单例更糟糕。
那我能做什么呢?
请注意我不需要save请求之间的此实例。我只需要一种方法在同一请求中访问我的框架中的此实例.
如果您想知道我现在为所有帮助对象所做的事情是服务容器(这被认为是不好的):
function app($class) { //> Sample
static $refs = array();
if (!isset($refs[$class]))
$refs[$class] = new $class();
return $refs[$class];
}
//> usage app('User')->methods();
(即什么symfony 确实)
模式应该是一个有用的指南,就像以前成功的软件抽象的库一样。如今,人们常常将模式视为某种宗教,无论程序的背景如何,事情要么“正确”,要么“错误”。
考虑一下您想要实现的目标,并以对您有意义的方式进行规划。胡思乱想这个模式和那个模式之间的微小区别没有抓住重点,而且它不会让你的程序编写出来。学习方式doing!
HTH.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)