think\Env 类处理的是系统的环境变量。在应用的初始化阶段,如果根目录下面有.env 文件,系统会自动加载。

这个类主要 有以下几个方法。

load

public function load($file)
{
    $env = parse_ini_file($file, true);
    $this->set($env);
}

读取环境变量定义文件,会返回以下形式的数组:

[
    'db'=>[
        'host'=>'localhost',
        'pass'=>'123456'
    ]
]

get

/**
 * 获取环境变量值
 * @access public
 * @param  string    $name 环境变量名
 * @param  mixed     $default  默认值
 * @return mixed
 */
public function get($name = null, $default = null, $php_prefix = true)
{
    if (is_null($name)) {
        return $this->data;
    }

    $name = strtoupper(str_replace('.', '_', $name));

    if (isset($this->data[$name])) {
        return $this->data[$name];
    }

    return $this->getEnv($name, $default, $php_prefix);
}

不传参数的话,会返回系统里面所有的环境变量。

参数名称里面带点的会转成下划线。

不存在这个环境变量的话,会看php系统里面有没有这个环境变量。有的话会一并存入ThinkPHP 的环境变量里面,没有的话返回 false。

protected function getEnv($name, $default = null, $php_prefix = true)
{
    if ($php_prefix) {
        $name = 'PHP_' . $name;
    }

    $result = getenv($name);

    if (false === $result) {
        return $default;
    }

    if ('false' === $result) {
        $result = false;
    } elseif ('true' === $result) {
        $result = true;
    }

    if (!isset($this->data[$name])) {
        $this->data[$name] = $result;
    }

    return $result;
}

set

/**
 * 设置环境变量值
 * @access public
 * @param  string|array  $env   环境变量
 * @param  mixed         $value  值
 * @return void
 */
public function set($env, $value = null)
{
    if (is_array($env)) {
        $env = array_change_key_case($env, CASE_UPPER);

        foreach ($env as $key => $val) {
            if (is_array($val)) {
                foreach ($val as $k => $v) {
                    $this->data[$key . '_' . strtoupper($k)] = $v;
                }
            } else {
                $this->data[$key] = $val;
            }
        }
    } else {
        $name = strtoupper(str_replace('.', '_', $env));

        $this->data[$name] = $value;
    }
}

传入的参数是字符串的话,参数名变成大写,参数中带点的,变成下划线。

传入的参数是数组的话,数组的键名变成大写。

键值如果也是个数组,会把键值数组的键和原来的键值拼接,用下划线连接作为参数名称,存入环境变量。

键值不是数组的话,直接键名作为参数名称,存入环境变量。


本文由 yang 创作,采用 知识共享署名 3.0,可自由转载、引用,但需署名作者且注明文章出处。

楼主残忍的关闭了评论