在codeigniter中放置全局函数的位置
Posted
技术标签:
【中文标题】在codeigniter中放置全局函数的位置【英文标题】:Where to place global functions in codeigniter 【发布时间】:2012-06-05 13:39:54 【问题描述】:我已经创建了一些实用函数,例如充当 echo htmlentities($var)
的 h()
。我希望这些功能随处可用。那我把它放在哪里。
【问题讨论】:
创建一个通过配置自动加载的助手。我对 CI 仍然很陌生,但本能地我会这样做。 到现在为止,帮助文件就是答案,那么您应该将下面的任何一个答案标记为正确答案。 (只是一个建议) 【参考方案1】:您应该在 /application/config/constants.php 文件中包含全局变量文件。然后将您的全局函数文件移动到 /application/helpers 文件夹。然后你应该自动加载全局函数文件。 /application/config/autoload.php
$autoload['helpers'] = array('your-global-function-file.php');
我建议不要在系统文件夹项目中移动任何东西,因为升级将是一场噩梦。有时重构你的代码以符合 CI 逻辑,从长远来看可能更快,而不是试图在整个地方复制/粘贴东西。
【讨论】:
对于一些无需更新即可创建和运行的小型项目,有时最好将它们保存在系统文件夹中。如果您有一个系统文件夹并将其用于 2 个以上的应用程序(如后端、前端等),这尤其有用,因此它们将始终具有相同的帮助程序,您可以在项目的每个部分中使用您的自定义函数,而无需复制/粘贴,这使它更易于管理。【参考方案2】:使用codeigniter-kint 和全局函数的自定义文件。 这将为您提供更有用和更漂亮的输出,例如:
文件:application/helpers/globalfunctions_helper.php
<?php
/**
* @file Global Helper Functions
*
*/
if(!function_exists('pr'))
function pr($value=false)
$CI = get_instance();
$CI->load->library('kint');
return @Kint::dump($value);
if(!function_exists('dp'))
function dp($value=false)
$CI = get_instance();
$CI->load->library('kint');
Kint::dump($value);
die();
另见:http://raveren.github.io/kint/
【讨论】:
【参考方案3】:这正是 Helpers 的用途。
创建一个新的助手(记得将它附加到 _helper.php)并将它放在你的助手文件夹中。
您可以在配置中自动加载它(这样您就可以在任何地方使用它),也可以在需要时手动加载它。
【讨论】:
【参考方案4】:正如@david barker 所说,您可以使用助手。创建一个名为“site_helper”的文件,其中包含所有函数。
请注意,您需要检查函数是否已经存在,否则您将收到“函数已声明”错误。
所以,类似:
文件site_helper.php
(在application/helpers/
)
if(!function_exists('h'))
function h($value)
return htmlentities($value);
if(!functin_exists('other_function')
//....etc.
然后你可以在 config/autoload.php 中自动加载它:
$autoload['helpers'] = array('site');
^-- 注意你如何只使用下划线之前的部分来调用文件。此外,助手不是类,而是函数的集合。
【讨论】:
这对我来说非常有效,但我需要将 $autoload['helpers'] 更改为 $autoload['helper'] 请注意,您不能使用助手中的模型(或任何其他$this
功能),但是您可以创建模型并自动加载它。在模型内部,您可以使用其他模型。以上是关于在codeigniter中放置全局函数的位置的主要内容,如果未能解决你的问题,请参考以下文章
理解静态变量局部变量全局变量静态函数全局函数的作用域和生命周期以及在内存中的存存储位置
理解静态变量局部变量全局变量静态函数全局函数的作用域和生命周期以及在内存中的存存储位置