【问题标题】:Issue with CodeIgniter hiding non-CI global variables when including outside code包含外部代码时 CodeIgniter 隐藏非 CI 全局变量的问题
【发布时间】:2013-02-07 19:06:51
【问题描述】:

我正在尝试将 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 及其包含的文件访问外部全局变量的技巧吗?我不想过多地更改遗留代码。

【问题讨论】:

    标签: php codeigniter scope global-variables codeigniter-2


    【解决方案1】:

    Codeigniter 提供了一个有用的辅助函数来解决这些情况。 get_instance() 函数将返回单例对象,以便您可以访问它的许多精彩功能。以下是您可以如何执行此操作的示例。

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

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

    下找到参考资料

    【讨论】:

    • 谢谢。在某些时候,我认为我们可能希望将全局变量移至 CI,但仍需要依赖外部变量。
    【解决方案2】:

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

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

    testfile.php:

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

    sidebar.php

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-16
      • 1970-01-01
      相关资源
      最近更新 更多