Code Igniter - 声明全局变量的最佳位置

J. *_*uni 15 php global codeigniter global-variables

我已经阅读了很多类似的问题,它们可能看似重复,但没有人问我到底要问什么,更重要的是:没有人有我想要的答案!

它非常简单:我只想$variable在几个地方使用:不仅包括视图和控制器,还包括routes.php其他配置文件.

我不想要这样的事情:使用Config类加载配置文件; 使用CI get_instance等等.

我只是想声明一个给定的$variable(它可能是一个常量,但我需要它作为变量),并且绝对在任何地方使用它.

事实上......我想知道CI引导程序中的哪个PHP文件是最先被解析的文件之一,所以我可以在那里引入我的全局变量......但不是核心/系统或不相关的文件,但是这个简单要求的"最佳"适合放置.

谢谢.

Dal*_*ale 35

有一个文件在/application/config调用constants.php

我通常把我的全部评论放在那里,以便轻松地看到它们的位置:

/**
 * Custom defines
 */
define('blah', 'hello mum!');
$myglobalvar = 'hey there';
Run Code Online (Sandbox Code Playgroud)

你之后index.php被加载,它加载的/core/CodeIgniter.php文件,再依次加载常用功能的文件/core/Common.php,然后/application/constants.php这样的事情链是要加载第四文件.


小智 6

我在帮助程序文件中使用“Globals”类和静态方法来管理我的应用程序的所有全局变量。这是我所拥有的:

globals_helper.php(在helpers目录中)

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

// Application specific global variables
class Globals
{
    private static $authenticatedMemberId = null;
    private static $initialized = false;

    private static function initialize()
    {
        if (self::$initialized)
            return;

        self::$authenticatedMemberId = null;
        self::$initialized = true;
    }

    public static function setAuthenticatedMemeberId($memberId)
    {
        self::initialize();
        self::$authenticatedMemberId = $memberId;
    }


    public static function authenticatedMemeberId()
    {
        self::initialize();
        return self::$authenticatedMemberId;
    }
}
Run Code Online (Sandbox Code Playgroud)

然后在 autoload.php 文件中自动加载它

$autoload['helper'] = array('globals');
Run Code Online (Sandbox Code Playgroud)

最后,为了在代码中的任何位置使用,您可以执行以下操作来设置变量:

Globals::setAuthenticatedMemeberId('somememberid');
Run Code Online (Sandbox Code Playgroud)

这是阅读它:

Globals::authenticatedMemeberId()
Run Code Online (Sandbox Code Playgroud)

注意:我将初始化调用保留在 Globals 类中的原因是为了在需要时可以使用该类的初始值设定项进行未来扩展。如果您不需要对通过 setter/getter 设置和读取的内容进行任何类型的控制,您也可以将属性公开。