Config.class.php 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. <?php
  2. namespace KIF\Core;
  3. use Exception;
  4. /**
  5. *
  6. * 配置类。作用:
  7. * 1、作为框架需要配置参数的那些类(如KIF\Cache、KIF\Dao 里的类)的参数获取接口。
  8. * 2、为KIF框架下的不同APP间 php in-process calls (APP间PHP进程内调用) 提供核心支持
  9. *
  10. * @author gaoxiaogang@gmail.com
  11. *
  12. */
  13. class Config {
  14. static private $instance;
  15. /**
  16. * 所有app的配置集
  17. * array(
  18. * md5($app_conf_path) => array(
  19. *
  20. * ),
  21. * ... ,
  22. * );
  23. * @var array
  24. */
  25. static protected $appConfigs = array();
  26. /**
  27. *
  28. * 当前app的配置
  29. * @var array
  30. */
  31. protected $appConfig;
  32. /**
  33. *
  34. * 不允许直接 new
  35. */
  36. private function __construct() {
  37. }
  38. /**
  39. *
  40. * 载入配置,如果成功,返回instance
  41. * @param string $app_conf_path 配置文件的路径
  42. * @return KIF\Core\Config
  43. */
  44. static public function load($app_conf_path) {
  45. $app_conf_path = realpath($app_conf_path);
  46. $app_conf_key = md5($app_conf_path);
  47. if (!isset(self::$appConfigs[$app_conf_key])) {
  48. $config = include($app_conf_path);
  49. if (!is_array($config)) {
  50. throw new Exception("load app_conf_path fail: {$app_conf_path}");
  51. }
  52. # 将conf的path存进来
  53. $config['conf_path'] = $app_conf_path;
  54. self::$appConfigs[$app_conf_key] = $config;
  55. }
  56. if (is_null(self::$instance)) {
  57. self::$instance = new self();
  58. }
  59. self::$instance->appConfig = self::$appConfigs[$app_conf_key];
  60. return self::$instance;
  61. }
  62. /**
  63. *
  64. * 单例模式
  65. * @param string $app_conf_path
  66. * @return KIF\Core\Config
  67. */
  68. static public function getInstance() {
  69. if (is_null(self::$instance)) {
  70. self::$instance = new self();
  71. }
  72. if (is_null(self::$instance->appConfig)) {
  73. throw new Exception('instance appconfig is null, pleace run KIF\Core\Config::load !');
  74. }
  75. return self::$instance;
  76. }
  77. /**
  78. *
  79. * 获取指定配置项的值
  80. * @param string $key
  81. * @return mixed
  82. */
  83. public function get($key) {
  84. if (empty($key)) {
  85. return false;
  86. }
  87. $keys = explode('.', $key);
  88. $value = $this->appConfig;
  89. foreach ($keys as $tmpKey) {
  90. if (!isset($value[$tmpKey])) {
  91. return false;
  92. }
  93. $value = $value[$tmpKey];
  94. }
  95. return $value;
  96. }
  97. /**
  98. *
  99. * 指定配置项是否设置了
  100. * @param string $key
  101. * @return boolean
  102. */
  103. public function exists($key) {
  104. return isset($this->appConfig[$key]);
  105. }
  106. /**
  107. *
  108. * 获取当前的配置信息
  109. * @return array
  110. */
  111. public function current() {
  112. return $this->appConfig;
  113. }
  114. /**
  115. *
  116. * 获取所有app的配置集
  117. * @return array
  118. */
  119. static public function all() {
  120. return self::$appConfigs;
  121. }
  122. }