CodeIgniter在包含外部代码时隐藏非CI全局变量的问题


Issue with CodeIgniter hiding non-CI global variables when including outside code

我正试图将CI引入到遗留应用程序中,但希望使用一些已经存在于CI外部的全局变量。我一直在将它们加载到/CI/config/config.php中,并在视图中使用以下方法获取它们:

$this->config->item('myvar');

这很好。然而,如果我在名为sidebar.php的模型中包含侧边栏,该模型希望访问存储在globals.php中的全局变量,则它们会显示为未定义。请注意,sidebar.php使用include语句从globals.php访问全局变量。此外,全局变量在globals.php中的定义如下:$myvar="bla";

globals.php和sidebar.php在CI之外。这两个文件不需要执行函数。

有人知道允许CI及其包含的文件访问其外部全局变量的技巧吗?我不想对遗留代码做太多更改。

Codeigniter提供了一个有用的辅助函数来解决这类情况。get_instance()函数将返回singleton对象,这样您就可以访问它的许多精彩功能。下面是一个如何做到这一点的示例。

$ci =& get_instance();
$ci->config->item('varname');

这是文件。您可以在标题使用库中的CodeIgniter资源

下找到参考资料

原来我在遗留代码无法访问的地方找到了globals.php文件的include_once语句。遗留代码已经有一个include_one语句,但它被忽略了,因为它已经包含在其他地方了。

如果我打开testfile.php:,我假设它在CI中的行为与此类似

testfile.php:

include_once("globals.php");
function testf(){
  include("sidebar.php");
}
testf();

边栏.php

include_once("globals.php");
echo $myvar; //fails