Codeigniter4 - 库、助手和模型之间的区别

Codeigniter4 - Difference between Libraries, helper and model

我迈出了 codeigniter4 的第一步。

现在我问自己,“Model”和“Helper”(我首先定义了一组函数)或“Helper”之间的最大区别是什么? “Libary”?

在什么情况下我应该创建自己的库、助手、模型?

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

有关模型的文档非常简单明了,确实没有任何注意事项。模型是一个 class,代表数据库中的单个 table,它为您提供各种相关功能:内置 CRUD 方法、保存实体的能力、查询生成器的透明使用方法等

一般来说,您通常会为每个数据库 table 使用一个模型 class。话虽这么说,you do not necessarily need Models in order to work with a database;但是,如果您希望需要模型提供的功能,则可以使用它来节省您自己完成的工作。

文档确实对库和助手之间的区别更加不透明。因此,我发现最大的 objective 差异衡量标准在于 CodeIgniter 本身如何使用它们,并且区别相当微妙:

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

Helpers 通过存在于导入 class.

命名空间中的 functions 提供它们的功能

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

换句话说,库通常是非静态 classes,(像所有非静态 classes 一样)在使用前必须 'constructed'。 class 中定义的方法驻留在 class 本身的命名空间中,而不是它们从中调用的 class。

例如,为了获得对当前 Session 对象的访问权限,我检索了 Session 库的一个实例 class:$session = session(); 使用 $session,然后我可以调用由该会话 class,例如 $session->destroy()

另一方面,Helpers 通常只是导入到导入 class 本身的命名空间中的函数集合。它们在当前上下文中被调用,并且它们的使用不以对象的使用为前提。

例如,如果我加载了 Array Helper (helper('array');),它将授予我访问一些我可以直接从当前上下文调用的函数的权限(例如 $result = array_deep_search(...))。我不必先创建一个对象,该函数直接导入到我当前的命名空间中。

这种区别可能有几个原因,其中最大的可能是命名冲突。如果您有两个 Helper,每个都有一个同名函数,则您不能同时导入这两个函数。另一方面,你可以有一百个不同的 classes 定义了 destroy() 方法,因为这些方法定义中的每一个都驻留在定义 class 本身的名称空间中,并通过调用该特定 class.

的实例

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

这可能无法回答 何时 你想使用其中之一,事实上这真的取决于你的意见。最后,它只是命名空间。你可以把东西放在任何你想要的地方,只要需要它的代码知道在哪里寻找它。我个人尝试在事情上遵循 CI 的领导,所以我倾向于遵循他们对两者的区别。