全局变量与配置变量

时间:2012-07-08 07:08:52

标签: php codeigniter

我在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()。

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

  

注意:我尽量避免使用全局变量,因为我试过它而我   面对许多不必要的问题,如未定义的变量,   惊讶!

2 个答案:

答案 0 :(得分:0)

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

即。 WEBSITE_TITLE

答案 1 :(得分:0)

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

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

如果您对绝大多数脚本进行概要分析,您会发现无论您对代码进行编码,引用都会对运行时产生无关紧要的影响,因此我建议每次都要简单明了地编写代码。

一种方法是使用单例类(有很多教程可以执行此操作)并使用魔术方法__get()来允许您动态地重载参数访问。在这种情况下,我觉得您必须使用单个类,因为这些属性方法仅适用于对象(非静态)参数引用。因此,您可以简单地使用:

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

请注意,上面示例中的$cfg实际上存储了一个对象句柄,因此执行此操作时没有物质运行时成本,您可以将此语句放在引用配置的每个函数或类构造函数的顶部如果您不希望使用Configuration::get()->someOtherParameter类型调用来丢弃代码,请使用item。

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

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

如果你想要一些想法,

Here是我的配置类文档的链接。