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.现在我可以根据需要调用 website_title()。

这是一个好的解决方案吗?你有什么缺点吗?

注意:我尽量避免使用全局变量,因为我试过了,我遇到了很多不必要的问题,比如未定义的变量,很惊讶!

4

2 回答 2

0

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

IEWEBSITE_TITLE

于 2012-07-08T07:10:22.003 回答
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()访问函数加上类构造函数可以处理缓存和访问单个参数的所有复杂性。这也意味着你 con 也封装了配置的来源:一些特定于应用程序的 D/B 配置表;一个或多个配置文件,...;甚至 cookie 或 URI 参数(只要您包含适当的验证)。

我个人不建议使用__set()魔术方法过度加载,因为 IMO,覆盖或设置配置参数应该是一个显式操作,例如$cfg->setConfigItem( 'someValue', TRUE );

如果您想要一些想法,这里是我的配置类文档的链接。

于 2012-07-08T15:26:53.483 回答