Codeigniter 4 Codeigniter4-库、助手和模型之间的差异

Codeigniter 4 Codeigniter4-库、助手和模型之间的差异,codeigniter-4,Codeigniter 4,我在codeigniter4中迈出了第一步 现在我问自己,一个我首先处理所有与数据库相关的事情的“模型”,一个我定义了一组函数的“助手”,或者一个“库””,两者之间的最大区别是什么 在哪些情况下,我应该创建自己的库、助手、模型 CI4 Docu不会给我答案,所以我希望有人能为我(和其他人)解释一下。关于模型的文档非常直截了当,没有任何警告。模型是表示数据库中单个表的类,它为您提供了多种相关功能:内置CRUD方法、保存实体的能力、透明地使用查询生成器方法等 一般来说,对于正在使用的每个数据库表,您

我在codeigniter4中迈出了第一步

现在我问自己,一个我首先处理所有与数据库相关的事情的“
模型”
,一个我定义了一组函数的“
助手”
,或者一个“
库”
”,两者之间的最大区别是什么

在哪些情况下,我应该创建自己的库、助手、模型


CI4 Docu不会给我答案,所以我希望有人能为我(和其他人)解释一下。

关于模型的文档非常直截了当,没有任何警告。模型是表示数据库中单个表的类,它为您提供了多种相关功能:内置CRUD方法、保存实体的能力、透明地使用查询生成器方法等

一般来说,对于正在使用的每个数据库表,您通常会有一个模型类。尽管如此;但是,如果您希望需要模型提供的功能,可以使用它来节省您自己的工作

关于库和助手之间的区别,文档确实要不透明得多。因此,我发现差异最客观的衡量标准是CodeIgniter本身如何利用它们,而区别相当微妙:

库通过方法提供其功能,这些方法存在于它们所定义的类的命名空间中

帮助程序通过导入类命名空间中存在的函数提供其功能

(注意:在PHP中,方法只是类中定义的函数的名称)

换句话说,库通常是非静态类(与所有非静态类一样),在使用之前必须“构造”。该类中定义的方法位于类本身的命名空间中,而不是从中调用它们的类

例如,为了访问当前会话对象,我检索会话库类的一个实例:
$Session=Session()使用
$session
,然后我可以调用该会话类提供的方法,如
$session->destroy()

另一方面,助手通常只是导入到导入类本身的命名空间中的函数的集合。它们在当前上下文中被调用,并且它们的使用不取决于对象的使用

例如,如果我加载了数组帮助器(
Helper('Array');
),它将允许我访问一些可以直接从当前上下文调用的函数(例如
$result=Array\u deep\u search(…)
)。我不必首先创建对象,该函数直接导入到我当前的命名空间中

这种区别可能有几个原因,其中最大的可能是命名冲突。如果有两个助手,每个助手都有一个同名函数,则不能同时导入这两个函数。另一方面,您可以有一百个不同的类定义了
destroy()
方法,因为这些方法定义中的每一个都位于定义类本身的命名空间中,并通过该特定类的实例调用

您可能会注意到,CI的所有辅助函数都以辅助函数本身的名称作为前缀,例如“array”或“form”;这是为了防止上述命名冲突

当你想使用其中一个的时候,这可能不起作用,事实上,这取决于你的观点。最后,这一切都只是名称空间。你可以把东西放在任何你想要的地方,只要需要它的代码知道在哪里可以找到它。我个人试图在事情上遵循CI的领导,因此我倾向于遵循两者之间的区别