【问题标题】:In PHP would it be fair to say that a Utility classes makes good Singleton Class?在 PHP 中,是否可以公平地说实用程序类制作好的单例类?
【发布时间】:2016-10-21 05:30:49
【问题描述】:

我无法决定何时创建单例类 我有一个用于数据库。

我想创建一个负责创建图像链接的类。 我给它 URL、图像、标题、替代标签、大小等... 它返回图片链接。

为此创建一个类有意义吗?如果是这样,这会是单例类的候选示例吗?

【问题讨论】:

  • 听起来您只需要一个返回锚标记的方法?你真的需要一个课程吗?
  • 一些链接变得非常复杂。这就是为什么我想一个有点像实用程序类的原因。需要的不仅仅是一个锚。但这不是重点。我是 php 和 oop 和编程的新手。我想知道的是创建这样的类是否有意义。如果是这样,单身人士是否合适。如果我再读到一个 Car 或 Person 类,我会发疯的。
  • 哈哈,是的,使用软件设计,您可能会碰壁一段时间,但最终它开始变得有意义
  • 不,这没有意义。您没有创建和返回对象,而是返回了一个字符串。您只需要一个函数/方法。你说有些变得复杂,但你仍然只传递相同的几位信息开始......
  • 从单一方法开始,但事情会发展。我认为将事物干净地封装在类中几乎总是更好。

标签: php oop singleton


【解决方案1】:

好的,我会在人们拿出干草叉之前赶到。

一般来说,从软件设计的角度来看,Singleton 很少是正确的选择。然而,有几次确实需要一个。这是我使用单例的标准:

  • 多次实例化类会对应用程序有害。这方面的一个示例可能是需要维护与远程资源的持久连接的类。因此,如果您创建类的新实例,您可能会产生大量可能有害的连接。在这种情况下,我能够实现对该功能的无锁访问。因此,这是少数情况下单例是最佳选择的情况之一。
  • 您有一些想要封装在类中的共享状态。然而,这里唯一适合单例的情况是这个共享状态是只读的。例如,共享配置数据通常通过 Singletons 完成。

这些只是我需要使用单例的情况。如果你养成了过度使用它们的习惯,真的很容易把自己编码到一个角落里。

对于您上面的示例,这并不是一个好的案例。您可以轻松地拥有一个公开帮助方法的 HtmlUtil 类。当您需要访问该功能时,您可以实例化此类,使用它然后将其丢弃。

【讨论】:

  • 但是实例化类然后一遍又一遍地扔掉它不是很昂贵吗?在页面加载时,我可能有 20-30 个图像按钮,然后我看到的另一个问题是类。他们可能需要其他类提供的资源吗?
  • 我不是 PHP 专家,但是用几乎任何语言实例化一个类的开销都非常小,除非该类在构建过程中执行了一些严重的繁重操作。我从未见过实例化开销成为性能问题。实际上恰恰相反,人们忘记从内存中释放东西(我不怀念 C++)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-13
  • 2023-04-01
  • 2022-08-10
  • 1970-01-01
  • 2015-03-12
  • 1970-01-01
相关资源
最近更新 更多