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

2022-08-30 18:13:01

我只想在几个地方使用一个:不仅是视图和控制器,还有和其他配置文件。$variableroutes.php

我不想要这样的东西:使用Config类加载配置文件;使用 CI 的 等。get_instance

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

事实上。。。我想知道CI引导中的哪个PHP文件是最早被解析的文件之一,所以我可以在那里介绍我的全局变量......但不是核心/系统或不合适的文件,而是“最佳”适合这种简单要求的位置。


答案 1

中有一个名为/application/configconstants.php

我通常把我的所有东西都放在那里,并附上一条评论,以便于看到它们的位置:

/**
 * Custom defines
 */
define('blah', 'hello mum!');
$myglobalvar = 'hey there';

加载后,它加载文件,然后又加载公共函数文件,然后在事物链中,它是要加载的第四个文件。index.php/core/CodeIgniter.php/core/Common.php/application/constants.php


答案 2

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

globals_helper.php(在帮助程序目录中)

<?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;
    }
}

然后将其自动加载到自动加载文件中.php

$autoload['helper'] = array('globals');

最后,对于代码中任何位置的使用,您可以执行此操作来设置变量:

Globals::setAuthenticatedMemeberId('somememberid');

这是要读它:

Globals::authenticatedMemeberId()

注意:我之所以将初始化调用保留在 Globals 类中,是为了让将来能够根据需要使用该类的初始值设定项进行扩展。如果您不需要对通过 setters/getters 设置和读取的内容进行任何控制,也可以公开这些属性。


推荐