Php 单件、工厂、自动加载器

Php 单件、工厂、自动加载器,php,singleton,design-patterns,factory-pattern,spl-autoloader,Php,Singleton,Design Patterns,Factory Pattern,Spl Autoloader,如果使用自动加载功能(带spl_autoload_寄存器),是否还需要: singleton:所有需要的类都将由autoloader加载,包括数据库、日志、r&r、前端等。所以需要“始终打开”等。我不清楚对象 factory:同样,autoloader将加载所需的类,所以使用factory类实例化实现接口或扩展抽象类的工人类有意义吗 单个实例用于保存特定类的单个实例,因此每当检索到该实例时,该实例始终是相同的。因此,设置数据意味着检索数据时数据总是相同的 这与自动加载类不同,因为每次创建新实例

如果使用自动加载功能(带spl_autoload_寄存器),是否还需要:

  • singleton:所有需要的类都将由autoloader加载,包括数据库、日志、r&r、前端等。所以需要“始终打开”等。我不清楚对象
  • factory:同样,autoloader将加载所需的类,所以使用factory类实例化实现接口或扩展抽象类的工人类有意义吗

单个实例用于保存特定类的单个实例,因此每当检索到该实例时,该实例始终是相同的。因此,设置数据意味着检索数据时数据总是相同的

这与自动加载类不同,因为每次创建新实例时,都会将状态重置为类的默认状态。尽管如此,单例应该谨慎使用,因为它们本质上是美化的全局变量

工厂模式应用于委托对象的确定和创建。当您不想指定具体的类,但在一组条件下需要某个子类时,可以使用它。您不能将构造参数传递给自动加载器,并且可能需要一些复杂的逻辑来确定应该从工厂返回哪个对象,因此它同样不能实现相同的功能


自动加载程序应该只用于查找类文件并包含它。它不应该(也不能)执行任何逻辑,例如实例化一个对象或决定加载哪个对象。

一个单实例用于保存一个特定类的单个实例,因此每当检索实例时,它总是相同的。因此,设置数据意味着检索数据时数据总是相同的

这与自动加载类不同,因为每次创建新实例时,都会将状态重置为类的默认状态。尽管如此,单例应该谨慎使用,因为它们本质上是美化的全局变量

工厂模式应用于委托对象的确定和创建。当您不想指定具体的类,但在一组条件下需要某个子类时,可以使用它。您不能将构造参数传递给自动加载器,并且可能需要一些复杂的逻辑来确定应该从工厂返回哪个对象,因此它同样不能实现相同的功能


自动加载程序应该只用于查找类文件并包含它。它不应该(也不能)执行任何逻辑,例如实例化对象或决定加载哪个对象。

Jonathan。。。工厂:有意义;Singleton:我很难理解,为什么重新创建实例对DB不好-Singleton在这里真的那么重要吗?Singleton的一个例子可能是数据库连接对象,以强制一次只存在一个连接。其他示例可能是保存应用程序中任何地方都可以访问的配置数据,例如,将命令行参数加载到名为
Config
的单例中,并通过
Config::read($name)
在任何地方访问它们。请允许我再问一个问题。那么,是否有必要从autoloader中排除单例,因为它们是静态实例化的?autoloader只找到类,而不创建对象。所以不,它没有被排除在自动加载器之外。自动加载程序用于查找singleton类,当您调用类名时会自动调用它(例如,
singleton::instance()
)。对于普通对象也是如此:一旦声明类名(通常是构造函数,例如
newclass()
),就会调用自动加载程序。希望这是有意义的。谢谢你的时间,非常感谢。对于任何读到这篇文章的人来说,更多的好读物是:乔纳森。。。工厂:有意义;Singleton:我很难理解,为什么重新创建实例对DB不好-Singleton在这里真的那么重要吗?Singleton的一个例子可能是数据库连接对象,以强制一次只存在一个连接。其他示例可能是保存应用程序中任何地方都可以访问的配置数据,例如,将命令行参数加载到名为
Config
的单例中,并通过
Config::read($name)
在任何地方访问它们。请允许我再问一个问题。那么,是否有必要从autoloader中排除单例,因为它们是静态实例化的?autoloader只找到类,而不创建对象。所以不,它没有被排除在自动加载器之外。自动加载程序用于查找singleton类,当您调用类名时会自动调用它(例如,
singleton::instance()
)。对于普通对象也是如此:一旦声明类名(通常是构造函数,例如
newclass()
),就会调用自动加载程序。希望这是有意义的。谢谢你的时间,非常感谢。对于阅读本文的任何人,请阅读以下内容: