PHP OOP配置类

PHP OOP配置类,php,config,Php,Config,我有个小问题。我已经创建了一个config类,它自动返回我想要的值 用法示例: echo Config::get('database.host'); 这将返回localhost 但是如果我有多个变量,那么它将返回我选择的第一个变量 例如: echo Config::get('database.host'); echo Config::get('database.username'); echo Config::get('database.password'); echo Config::get

我有个小问题。我已经创建了一个config类,它自动返回我想要的值

用法示例:

echo Config::get('database.host');
这将返回localhost

但是如果我有多个变量,那么它将返回我选择的第一个变量

例如:

echo Config::get('database.host');
echo Config::get('database.username');
echo Config::get('database.password');
echo Config::get('database.name');
全部返回localhost

这是我的配置类:

<?php

namespace App\Libraries;

class Config
{
  private static $_config;

  public static function set($config)
  {
    self::$_config = $config;
  }

  public static function get($var = null)
  {
    $var = explode('.', $var);

    foreach ($var as $key) {
      if (isset(self::$_config[$key])) {
        self::$_config = self::$_config[$key];
      }
    }

    return self::$_config;
  }

  public function __destruct()
  {
    self::$_config = null;
  }
}

?>
$config变量包含我的整个配置文件:

 <?php

 $config = [
    'database' => [
    'host'     => 'localhost',
    'name'     => 'dev',
    'charset'  => 'utf8',
    'username' => 'root',
    'password' => '1234'
  ]
];

?>

希望你们能帮助我,伙计们:)
(抱歉英语不好)

嗯,是的。第一次调用
get()
,将销毁所有其他配置选项:

Config::set($config); // sets your nested array
Config::get('foo.bar');
     self::$_config = self::$_config['foo'];
           ^^^^^^^^--overwrite this
                            ^^^^^^^^^^^^---with the foo sub value
     self::$_config = self::$_config['bar'];
           ^^^^^^^^--overwrite the previous foo value
                              ^^^^^^^---with bar's
然后,下次调用get()时,您将无法访问原始的
$\u config
数组。您正在访问上次get()调用检索到的任何值

您需要使用一个临时变量,例如

Config::get('foo.bar')

   explode ...
   $temp = self::$_config;
   foreach(... as $key) {
      $temp = $temp[$key];
   }
   return $temp;
Config::get('foo.bar')

   explode ...
   $temp = self::$_config;
   foreach(... as $key) {
      $temp = $temp[$key];
   }
   return $temp;