php - 我应该为 User 类的唯一实例使用哪种模式?

标签 php oop design-patterns

我有这个用户类

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    
}

现在考虑到我不能有超过 1 个用户登录(当然因为我们正在谈论单个 http 请求)我应该在哪里存储我的 istance 的引用?

在这种情况下,单例 会很有用,但现在每个人都说单例是邪恶的(比如静态方法)。

我可以做一个 $GLOBALS['currentUser'] = new User(); 并让它在任何地方都可以访问,但我认为这比单例更糟糕。

那我能做什么呢?
请注意我不需要在请求之间保存这个实例。 我只需要一种方法来在同一请求中访问我的框架中的这个实例

如果你想知道我现在为我所有的助手对象做的是一个服务容器(这也被认为是不好的):

function app($class) {      //> Sample
    static $refs = array();

    if (!isset($refs[$class]))
        $refs[$class] = new $class();

    return $refs[$class];
}

//> usage app('User')->methods();

(即什么symfony does)

最佳答案

模式应该是一个有用的指南,就像以前成功的软件抽象库一样。如今,人们常常将模式视为某种宗教,无论程序的上下文如何,事情要么是“对”要么是“错”。

想一想您想要实现的目标,并以对您有意义的方式进行规划。胡乱讨论这种模式和那种模式之间的细微差别没有捕获要点,它不会让你的程序写出来。边做边学!

HTH.

关于php - 我应该为 User 类的唯一实例使用哪种模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6078562/

相关文章:

php - 使用数据透视表 mySQL 查询特定值

php - 组织类(class) - 帮助 OOP 初学者

design-patterns - 一些架构模式的简单代码实现

c++ - 这是一个糟糕的设计吗?

php - Laravel 改变外键约束

php - 查询中的联合无法正常工作

php - 我在 php 中寻找比 substr_count($string, $needle, $offset, $length) 更好的算法复杂度

oop - Lua检查方法是否存在

python - Python 中的菱形继承(钻石问题) : Call method from all parent classes

java - 如何在Spring Boot中实现装饰器模式