PHP单例类的最佳实践

Mar*_*sen 23 php oop singleton design-patterns class

可能重复:
谁需要单身人士?

我总是写最佳实践,但我也想了解为什么给定的东西是最佳实践.

我读过一篇文章(遗憾的是我不记得),单例类更喜欢被实例化,而不是用静态函数创建并使用范围解析运算符(::)进行访问.因此,如果我有一个包含所有要验证的工具的类,简而言之:

class validate {
    private function __construct(){}
    public static function email($input){
        return true;
    }
}
Run Code Online (Sandbox Code Playgroud)

我被告知这被认为是不好的做法(或者至少被警告过),因为有垃圾收集器和维护这样的东西.所以对"单体类作为静态方法"的批评是什么,我实例化一个类我100%肯定我只会实例化一次.对我来说,它似乎在做"双重工作",因为它已经准备好了.我错过了什么?

对此事有何看法?当然,这不是生死攸关的问题,但如果有选择的话,人们也可以做正确的事情:)

hak*_*kre 6

单例对象是仅实例化一次的对象.这是不一样的Singleton模式,这是一个(反)模式如何写一个类可以只实例化一次,辛格尔顿(大小号开头):

"确保一个类只有一个实例,并提供一个全局访问点."

就PHP而言,通常不需要实现Singleton模式.事实上,当你要求最佳实践时,你应该避免这样做,因为这是不好的做法.

此外,您找到的大多数PHP代码示例都是模式的半实现实现,忽略了PHP的工作方式.这些伪造的实现不符合模式中的"确保".

这也说明了一些事情:通常不需要它.如果一个草率的实现已经完成了工作,甚至没有接近模式的用途,那么错误的模式已被用于这种情况,它开始变成反模式.

在PHP中,通常不需要不惜一切代价确保类只有一个实例,PHP应用程序并不是您需要的那么复杂(例如,没有多个线程可能需要引用原子实例).

通常剩下的是类实例的全局访问点,这是大多数PHP开发人员(错误)使用该模式的原因.正如今天所知,使用这样的"Singletons"会导致全局静态的标准问题,这会在多个级别上将复杂性引入代码并降低可重用性.作为程序员,您无法灵活地使用代码.但灵活性是解决问题的一项非常重要的技术.程序员一整天都在解决问题.

因此,在应用设计模式之前,需要评估优缺点.仅使用某种模式通常没有帮助.

对于初学者,我会说,只需编写您的类并注意如何以及何时在应用程序逻辑的其他部分实例化,以便保持灵活性.

  • 你的第一句话是矛盾的:).-1.对于"PHP应用程序并不复杂",也为-1.您可以使用任何语言编写复杂的软件.设计模式与软件架构有关,而与下层技术无关.我会特权,但我不能.:) (3认同)

归档时间:

查看次数:

69492 次

最近记录:

13 年,4 月 前