CodeIgniter:创建库和创建的决策CodeIgniter中的助手

时间:2010-03-02 06:52:47

标签: codeigniter design-patterns

在CodeIgniter中开发一段时间之后,我发现在创建自定义库以及何时创建自定义帮助程序时很难做出决定。

我明白两者都允许在其中使用业务逻辑并且可以在整个框架中重用(从不同的控制器调用等)。

但我坚信CI核心开发人员正在将图书馆与帮助者分开,这背后有一个原因,我想,这就是等待我发现并开悟的原因。

CI开发人员,请告知。

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

我可以有一个

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

   function get_message() {/*...*/}

   function update_message() {/*...*/}
}

或者,我也可以将所有功能都包含在帮助器中。

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

无论哪种方式,它仍然可以重复使用。所以这让我思考决策点,关于我们何时创建一个库和一个帮助器,特别是在CI中。

在一个普通的(无框架式)php应用程序中,由于没有帮助程序,因此选择很明确,您只需创建一个库即可重用代码。但在这里,在CI中,我想了解核心开发人员对库和帮助程序的分离

6 个答案:

答案 0 :(得分:57)

选择归结为一组函数或类。选择与实例类和静态类几乎相同。

如果你只有一组简单的函数,那么你只需要创建一组函数。如果这些函数组共享大量数据,那么您需要创建一个具有实例的类,以便在方法(类函数)调用之间存储此数据。

您是否有许多与您的通知消息相关的公共或私人财产?

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

答案 1 :(得分:28)

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

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

但是,还有一个表单助手可以帮助您创建表单的HTML。与表单验证库的最大区别在于表单助手不是创建新功能,它只是一组相关的函数,可以帮助您正确地编写表单的HTML。

希望这种区别对你有所帮助。

答案 2 :(得分:7)

首先,您应该确定您了解CI库和帮助程序类之间的区别。帮助程序类是帮助任何预先制作的内容,例如arraystringuri等;他们在那里,PHP已经为他们提供了功能,但你仍然创建了一个助手来为他们添加更多的功能。

另一方面,库可以是你第一次创建的东西,任何可能不一定在那里的解决方案。

一旦你完全理解了这种差异,做出决定一定不会那么困难。

答案 3 :(得分:3)

Helper包含一组帮助您完成特定任务的功能。

Available helpers in CI

库通常包含非CI特定功能。像图像库一样。可以在应用程序之间移植的东西。

Available libraries in CI

来源link

答案 4 :(得分:2)

如果有人问我在创建助手或图书馆的时候你会采用什么方式。

我认为这些差异:

  • 类:简而言之,Class是对象的蓝图。对象在应用程序中封装了概念上相关的状态和责任,并且通常提供与之交互的编程接口。这有助于提高代码重用率并提高可维护性。
  • 函数:函数是一段代码,它以参数的形式再输入一个并进行一些处理并返回一个值。您已经看过许多函数,如fopen()和fread()等。它们是内置函数,但PHP也为您提供了创建自己的函数的选项。

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

的库
  1. 全局变量需要在两个或更多函数中使用,甚至一个,我讨厌使用Global关键字
  2. 按照每次调用或加载的默认初始化
  3. 某些任务是非公开的实体私有,想到函数从来没有公开修饰符为什么?
  4. 函数依赖于函数,即任务是分开的,但是两个或多个任务需要它。想想validate_email只检查to,cc,bcc等的电子邮件发送脚本。所有这些都需要validate_email。
  5. 最后,并非所有相关任务,即功能都应放在单个对象或文件中,更容易引用和记忆。
  6. 对于助手:任何与图书馆不匹配的点

答案 5 :(得分:0)

我个人使用库来做大事,比如说我建的FTP库比CodeIgniters出货的库快得多。这是一个有很多方法的类,它们彼此共享数据。

我将帮助程序用于与许多其他功能无关的较小任务。像装饰字符串这样的小功能可能就是一个例子。或者将目录递归地复制到另一个位置。