2012-07-08 118 views
0

我在application/config/config.php中有自定义配置项。全局变量与配置变量

样品我的自定义配置项:

$config['website_title'] = 'ABC Website'; //Assume website title is fixed 
. 
. 
. 
etc 

现在我可以调用任何$this->config->item('website_title')凡在我的应用程序。但是,我并没有发现它足够高效,因为我可能在项目中有多个$ this-> config-> item('website_title')。我想出了以下解决方案:

1.创建一个功能,一个助手里,返回的配置项,如下:

public function website_title() { 

    return $this->config->item('website_title'); 

} 

2.Now我可以调用website_title()多达我想要。

这是一个很好的解决方案吗?你看到任何缺点吗?

注:我尝试,因为我尝试了避免使用全局变量和我 面临着许多不必要的问题,如不确定的变量, 惊讶!

回答

0

“高效”是什么意思?运行时效率?编码效率?明晰?

就运行效率而言Truth的使用建议可能是最简单和最好的。但是,我更喜欢使用严格的类/对象实现进行编码,实际上,定义只是全局常量。

如果配置文件中的绝大部分脚本,你会发现,无论你编写配置引用使得在运行时没有重大的影响,所以我建议去为简单和编码每一次的清晰度。

一种方法是使用单例类(有很多关于这样做的教程),并使用神奇方法__get()来允许动态重载参数访问。这是一种情况,我觉得你必须使用一个类,因为这些属性方法只能用于对象(非静态)参数引用。因此,你可以简单地使用:

$cfg = Configuration::get(); 
... 
... $cfg->someConfigParam ... // to refer to a config parameter 
... 
... /* or even */ ... Configuration::get()->someOtherParameter ... 

注意$cfg在上面的例子基本存储对象句柄,所以没有这样做,材料运行成本,你可以在每个函数的顶部把这个陈述或如果你不想用Configuration::get()->someOtherParameter类型的调用抛弃你的代码,那么它引用一个配置项。

Configuration::__get()访问函数加上类构造函数可以处理缓存和访问各个参数的所有复杂性。这也意味着你也可以封装配置的来源:一些特定于应用程序的D/B配置表;一个或多个配置文件,...;甚至cookie或URI参数(只要您包含适当的验证)。

我个人建议不要用__set()这个神奇方法加载,因为IMO会覆盖或设置一个配置参数应该是一个明确的动作,例如, $cfg->setConfigItem('someValue', TRUE);

Here是一个链接到我的配置类的文档,如果你想要一些想法。

0

我曾经对程序员提出过这样的问题。我得到了一个很好的答案,只需使用常量。

I.e. WEBSITE_TITLE