【问题标题】:How to handle Objects and Variables that are universally needed in PHP如何处理 PHP 中普遍需要的对象和变量
【发布时间】:2014-10-30 12:58:11
【问题描述】:

所以我有一个用于缓存系统的类、一个用于数据库连接的类、一组应用程序设置、一个用于处理不同语言的类等。我创建的大多数其他类都需要这些类

有没有比这样做更好的方法来处理它:

function __construct($database,$cache,$appsettings,$language,...) {

在我的每一节课上?这种方法的另一个问题是,如果函数需要数据库连接,我无法将它们设为静态。例如,我有一个用户类,它现在有一个“getUsernameFromID()”函数,它使用数据库来获取该用户名。如果我使用上述方法,我将不得不实际创建一个用户类,每次某些代码需要来自 ID 的用户名。

单例类可以解决这个问题,但这里的其他答案说它们在 PHP 中是一种不好的做法。现在我正在为这些类使用全局变量,这显然也是一个糟糕的解决方案。我该怎么办?

我希望这已经足够清楚了,我正在尽力而为。

【问题讨论】:

  • 您可以创建一个ApplicationState 类,其中包含当前应用程序的状态,并具有缓存、数据库等对象。然后您只需将ApplicationState 实例注入你的类,如果你需要数据库,你可以从状态中提取它:state.getDatabase();
  • 完全取决于您现有的架构。如果您正在为失去静态功能而感到遗憾,那么您的架构很可能设计得不好。如果你坚持现有的东西,单例包装器似乎是最好的选择。如果没有,看看其他流行的现代 mvc 框架如何处理这个
  • 我刚开始在 PHP 中使用 OOP,所以我没有太多经验。我可以看看哪些流行的 MVC?

标签: php oop globals


【解决方案1】:

您可能想研究依赖注入和服务定位器设计模式。 Pimple 是一个流行的依赖注入管理器。

单身人士不一定是坏习惯。很多时候,我们只是不好地使用它们。例如,管理自己的“单一性”的类可以被视为反模式。它创建了对自身的依赖并在全局范围内强制执行(在它自己的范围之外)。最好由框架或其他可以在范围内强制执行的对象来管理单一性。

【讨论】:

    猜你喜欢
    • 2022-11-02
    • 2012-04-16
    • 2018-06-17
    • 2012-05-12
    • 1970-01-01
    • 1970-01-01
    • 2011-02-09
    • 1970-01-01
    • 2017-01-04
    相关资源
    最近更新 更多