Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.
 
 
 
 

121 rader
2.6 KiB

  1. <?php
  2. namespace Kuxin;
  3. use Kuxin\Helper\Arr;
  4. /**
  5. * 配置
  6. * Class Config
  7. *
  8. * @package Kuxin
  9. * @author Pakey <pakey@qq.com>
  10. */
  11. class Config
  12. {
  13. /**
  14. * 缓存存储变量
  15. *
  16. * @var array
  17. */
  18. protected static $_config = [];
  19. /**
  20. * 获取参数
  21. *
  22. * @param string $name 参数名
  23. * @param mixed $defaultVar 默认值
  24. * @return mixed
  25. */
  26. public static function get(string $name = '', $defaultVar = null)
  27. {
  28. if ($name == '') {
  29. return self::getAll();
  30. }
  31. $name = strtolower($name);
  32. if (strpos($name, '.')) {
  33. //数组模式 找到返回
  34. $keys = explode('.', $name);
  35. $data = self::$_config;
  36. foreach ($keys as $name) {
  37. if (isset($data[$name])) {
  38. $data = $data[$name];
  39. } else {
  40. return $defaultVar;
  41. }
  42. }
  43. return $data;
  44. } else {
  45. return self::$_config[$name] ?? $defaultVar;
  46. }
  47. }
  48. /**
  49. * 获取参数
  50. *
  51. * @return mixed
  52. */
  53. public static function getAll()
  54. {
  55. return self::$_config;
  56. }
  57. /**
  58. * @param string $name
  59. * @param mixed $var
  60. */
  61. public static function set(string $name, $var): void
  62. {
  63. //数组 调用注册方法
  64. if (is_array($name)) {
  65. self::register($name);
  66. } elseif (strpos($name, '.')) {
  67. $data = self::$_config;
  68. $tmp = &$data;
  69. $fields = explode('.', $name);
  70. foreach ($fields as $field) {
  71. $tmp = &$tmp[$field];
  72. }
  73. $tmp = $var;
  74. self::$_config = $data;
  75. } else {
  76. self::$_config[$name] = $var;
  77. }
  78. }
  79. /**
  80. * 注册配置
  81. *
  82. * @param $config
  83. */
  84. public static function register($config)
  85. {
  86. if (is_array($config)) {
  87. self::$_config = Arr::merge(self::$_config, $config);
  88. }
  89. }
  90. /**
  91. * 加载目录配置
  92. *
  93. * @param $dir
  94. */
  95. public static function LoadDir($dir)
  96. {
  97. // todo 缓存所有配置
  98. $dir = rtrim($dir, '/');
  99. $files = scandir($dir);
  100. foreach ($files as $file) {
  101. if ($file == '.' || $file == '..') {
  102. continue;
  103. }
  104. $config = Loader::import($dir . '/' . $file);
  105. if (is_array($config)) {
  106. self::$_config = Arr::merge(self::$_config, $config);
  107. }
  108. }
  109. }
  110. }