CodeIgniter:在CodeIgniter中创build库和帮手的决策

在CodeIgniter开发一段时间后,我发现很难决定何时创build自定义库以及何时创build自定义帮助器。

我明白,都允许有业务逻辑,并可以在整个框架(从不同的控制器等调用)

但是我坚信,CI核心开发者把图书馆和帮手分开的事实,背后有一个原因,我想这就是等待我去发现和开悟的原因。

CI开发者在那里,请指教。

我认为最好包括一个例子。

我可以有一个

class notification_lib { function set_message() { /*...*/} function get_message() {/*...*/} function update_message() {/*...*/} } 

另外,我也可以包括所有的function到帮手。

notification_helper.php文件中,我将包括set_message(), get_message(), update_message() ..

无论哪种方式,它仍然可以被重用。 所以这让我想到了我们到底什么时候创build一个图书馆和帮手,特别是在CI的决策点。

在一个正常的(无框架的)PHP应用程序中,select是清楚的,因为没有帮助者,你只需要创build一个库来重用代码。 但在这里,我想了解一下核心开发者图书馆和帮手的分离

有一个问题,当我决定这个时,我会问自己,我认为也会对你有所帮助。 问题是:我是在为我的框架提供一个function还是在整合?

如果您有添加到框架的function,那么您将需要为此创build一个库。 例如,表单validation是您添加到框架的一个function。 即使你可以在没有这个库的情况下进行表单validation,你也可以创build一个标准的validation系统,这是一个function。

不过,也有一个表单助手可以帮助你创build表单的HTML。 与表单validation库最大的区别在于,表单助手并没有创build一个新的function,它只是一组相关的function,可以帮助您正确地编写表单的HTML。

希望这种差异将帮助你,因为它有我。

那么select归结为一组函数或类。 这个select和一个实例类和一个静态类几乎是一样的。

如果你只有一组function,那么你只需要做一组function。 如果这些函数组共享大量的数据,那么您需要创build一个具有实例的类来将这些数据存储在方法(类函数)调用之间。

你有很多公共或私人物业存储与通知消息有关吗?

如果你使用一个类,你可以通过系统设置多个消息,然后get_messages()可以返回一个私有的消息数组。 这将使它成为一个图书馆的完美。

首先 ,您应该确定您了解CI libaray和帮助程序类的区别。 帮助类是任何帮助任何预制的东西,如arraystringuri等; 他们在那里,PHP已经为他们提供了function,但你仍然创build一个帮手,以添加更多的function。 另一方面,libaray可以是任何你第一次创build的东西,任何可能不一定已经存在的解决scheme。

一旦你充分理解了这种差异,决定一定不会那么困难。

希望有所帮助。

谢谢

助手包含一组function来帮助您完成特定的任务。

CI中可用的助手

库通常包含非CI特定的function。 像一个图像库。 应用程序之间可移植的东西。

CI中的可用库

来源链接

如果有人问我在创build助手或图书馆时需要遵循的方式。

我认为这些差异:

  • Class:简而言之,Class是一个对象的蓝图。 一个对象在概念上封装了你的应用程序中相关的状态和责任,并且通常提供一个编程接口来与这些接口进行交互。 这促进了代码重用并提高了可维护性。
  • 函数:函数是一个代码,它以参数的forms接受一个input,并进行一些处理并返回一个值。 你已经看过许多函数,比如fopen()和fread()等。它们是内置函数,但是PHP也给你select创build你自己的函数的function。

所以,如果任何一点匹配,去即库

  1. 全局variables需要使用两个或更多的函数甚至一个,我讨厌使用Global关键字
  2. 默认初始化为每次调用或加载
  3. 有些任务是私有的,不公开的实体,想到函数从来没有公有的修饰符为什么?
  4. 函数的function依赖关系,即任务是分开的,但两个或更多的任务需要它。 认为validate_email只能检查电子邮件发送脚本,cc,密件抄送等。 所有这些需要validate_email。
  5. 最后,所有相关的任务,即function都应放在单个对象或文件中,便于参考和记忆。

帮助者:任何与库不匹配的点

就个人而言,我使用库来做大事,比如我build立的FTP库比CodeIgniters发布的库要快得多。 这是一个有很多相互共享数据的方法。

我使用帮助器来处理与许多其他function无关的较小任务。 像装饰string这样的小函数可能就是一个例子。 或者recursion地将目录复制到另一个位置。