Php 在类似CMS的应用程序中,单例模式不可避免吗?

Php 在类似CMS的应用程序中,单例模式不可避免吗?,php,content-management-system,singleton,dependency-management,Php,Content Management System,Singleton,Dependency Management,在CMS应用程序中,如WordPress,CMS只加载插件,然后插件从CMS请求其依赖项(如数据库、配置等),CMS的作用类似于注册表 我还没有见过用PHP编写的CMS应用程序不使用这种模式(或反模式)。它们都以某种方式使用注册表,例如: craft()->request->getPost('id') (craft) 或 或 或 因此,单例模式对于这种类型的应用程序来说是不可避免的,这样说对吗 因此,对于这种类型的应用程序,单例模式是不可避免的,对吗 我不能说这是直截了当的。 S

在CMS应用程序中,如WordPress,CMS只加载插件,然后插件从CMS请求其依赖项(如数据库、配置等),CMS的作用类似于注册表

我还没有见过用PHP编写的CMS应用程序不使用这种模式(或反模式)。它们都以某种方式使用注册表,例如:

craft()->request->getPost('id')  (craft)

因此,单例模式对于这种类型的应用程序来说是不可避免的,这样说对吗

因此,对于这种类型的应用程序,单例模式是不可避免的,对吗

我不能说这是直截了当的。 Singleton是一种设计模式,而不是需求。 事实上,大多数开发人员都是在不知情的情况下实现设计模式的。 我敢打赌,如果有人真的很努力,他会找到一种完全避免单身的方法。 我不知道这是为什么困扰你。但这是我能提供的最好答案

很多(可能全部?)内容管理系统都使用这种面向对象的php编程,因为它是最干净、最好的编码方式。当然可以避免这种情况,但代码不再是结构化的

如果你觉得奇怪,你应该学习如何使用它,你会发现这是一个非常干净的编码方式

更多信息可在此处找到:

在这里:


您可以使用依赖项注入来避免单例。这通常与工厂一起创建对象。我知道,只是没有cms使用di,我想知道这样做的原因是否是因为cmsI的性质不可能,除了一些cms应用使用di之外。如果你想知道为什么WordPress没有,也许可以问问核心开发者?
global $wpdb;
$wpdb->insert($table, $data);   (wp)
$db = Database::getConnection();  (drupal)
$db = JFactory::getDbo();  (joomla)