【问题标题】:PHP: Serialize vs Singleton vs Dependency Injection vs something else?PHP:序列化 vs 单例 vs 依赖注入 vs 其他?
【发布时间】:2012-04-23 06:41:29
【问题描述】:

我必须在我的代码中使用我总是想在需要时访问它们的对象。 一个数据库对象,它保存与数据库的连接。这是一个静态对象,连接不会改变。 我有一个用户对象,它包含用户级别、用户名和 id。

我阅读了一些关于如何做到这一点的帖子和文章。我找到了 3 个解决方案 - 使用单例 - 序列化对象并将其存储在会话中 - 使用依赖注入。

单例不好,因为全局不好。 序列化对象并将其存储在会话中对我来说似乎很难看(不完全知道为什么) 使用依赖注入会使你的构造函数充满参数。

现在我有两个问题 - 还有其他我没有提到的方法吗? - 授予对上述对象的整体访问权限的最佳方法是什么?

【问题讨论】:

  • 序列化对于数据库对象来说不是一个好主意...数据库连接等资源无法序列化

标签: php serialization dependency-injection singleton


【解决方案1】:

你把一切都搞砸了。

授予对上述对象的整体访问权限的最佳方法是什么?

不,根本没有这种方法

它们是不同的对象,需要不同的处理。

对于数据库对象,您别无选择。
您可以为每个请求创建它并在整个处理过程中使用它(当然,您需要将其设为全局以便在其他类中使用)。
或者将其用作静态单例对象, 每次您需要与数据库交互时都会调用该对象。它将在第一次调用时建立数据库连接并最终使用它直到处理请求结束。如果有另一个请求,它将重新开始。

对于用户对象,透明在会话中序列化和依赖注入都很好。
但是,在每个请求上创建一个用户对象并不是一个坏主意。在你的位置,我不会以这种方式折磨会议。

【讨论】:

    【解决方案2】:

    很抱歉,您使用了软件开发中的专业词汇,但您没有专业知识... DI 可以使用构造函数或 setter 方法...您也可以使用 DI Container 之类的pimple、synfony 或 flow3 ... 或者自己写一个。

    我们在一个不允许单例的内部框架上工作,直接会话访问是。也很好 -> 可能你必须学习建筑。

    有一些好书可供选择。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-05-06
      • 1970-01-01
      • 2012-09-23
      • 2016-11-09
      • 1970-01-01
      • 2023-02-20
      • 2015-02-12
      相关资源
      最近更新 更多