首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Codeigniter4 -库、助手和模型的区别

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

Stack Overflow用户
提问于 2021-02-02 15:28:18
回答 1查看 529关注 0票数 0

我在codeigniter4中迈出了第一步。

现在,我问自己,"Model“(我首先做所有与数据库相关的事情)、一个"Helper”(我定义了一组函数或一个"Libary“)之间有什么大的区别?

在哪些情况下,我应该创建自己的字典,助手,模型?

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-06 07:04:17

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

通常,每个数据库表通常都有一个Model类。话虽如此,您不一定需要模型才能使用数据库。;但是,如果您希望使用Model提供的功能,则可以使用它来节省您自己完成该功能的工作。

关于图书馆和助理员之间的区别,这些文档确实要不透明得多。因此,我发现最客观的区别是CodeIgniter如何使用它们,区别是相当微妙的:

库通过存在于类的命名空间中的方法提供它们的功能。

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

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

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

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

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

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

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

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66012684

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档