You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
198 lines
3.9 KiB
198 lines
3.9 KiB
<?php |
|
/** |
|
* 配置管理 |
|
* |
|
* @category typecho |
|
* @package Config |
|
* @copyright Copyright (c) 2008 Typecho team (http://www.typecho.org) |
|
* @license GNU General Public License 2.0 |
|
* @version $Id$ |
|
*/ |
|
|
|
/** |
|
* 配置管理类 |
|
* |
|
* @category typecho |
|
* @package Config |
|
* @copyright Copyright (c) 2008 Typecho team (http://www.typecho.org) |
|
* @license GNU General Public License 2.0 |
|
*/ |
|
class Typecho_Config implements Iterator |
|
{ |
|
/** |
|
* 当前配置 |
|
* |
|
* @access private |
|
* @var array |
|
*/ |
|
private $_currentConfig = array(); |
|
|
|
/** |
|
* 实例化一个当前配置 |
|
* |
|
* @access public |
|
* @param mixed $config 配置列表 |
|
*/ |
|
public function __construct($config = array()) |
|
{ |
|
/** 初始化参数 */ |
|
$this->setDefault($config); |
|
} |
|
|
|
/** |
|
* 工厂模式实例化一个当前配置 |
|
* |
|
* @access public |
|
* @param array $config 配置列表 |
|
* @return Typecho_Config |
|
*/ |
|
public static function factory($config = array()) |
|
{ |
|
return new Typecho_Config($config); |
|
} |
|
|
|
/** |
|
* 设置默认的配置 |
|
* |
|
* @access public |
|
* @param mixed $config 配置信息 |
|
* @param boolean $replace 是否替换已经存在的信息 |
|
* @return void |
|
*/ |
|
public function setDefault($config, $replace = false) |
|
{ |
|
if (empty($config)) { |
|
return; |
|
} |
|
|
|
/** 初始化参数 */ |
|
if (is_string($config)) { |
|
parse_str($config, $params); |
|
} else { |
|
$params = $config; |
|
} |
|
|
|
/** 设置默认参数 */ |
|
foreach ($params as $name => $value) { |
|
if ($replace || !array_key_exists($name, $this->_currentConfig)) { |
|
$this->_currentConfig[$name] = $value; |
|
} |
|
} |
|
} |
|
|
|
/** |
|
* 重设指针 |
|
* |
|
* @access public |
|
* @return void |
|
*/ |
|
public function rewind() |
|
{ |
|
reset($this->_currentConfig); |
|
} |
|
|
|
/** |
|
* 返回当前值 |
|
* |
|
* @access public |
|
* @return mixed |
|
*/ |
|
public function current() |
|
{ |
|
return current($this->_currentConfig); |
|
} |
|
|
|
/** |
|
* 指针后移一位 |
|
* |
|
* @access public |
|
* @return void |
|
*/ |
|
public function next() |
|
{ |
|
next($this->_currentConfig); |
|
} |
|
|
|
/** |
|
* 获取当前指针 |
|
* |
|
* @access public |
|
* @return mixed |
|
*/ |
|
public function key() |
|
{ |
|
return key($this->_currentConfig); |
|
} |
|
|
|
/** |
|
* 验证当前值是否到达最后 |
|
* |
|
* @access public |
|
* @return boolean |
|
*/ |
|
public function valid() |
|
{ |
|
return false !== $this->current(); |
|
} |
|
|
|
/** |
|
* 魔术函数获取一个配置值 |
|
* |
|
* @access public |
|
* @param string $name 配置名称 |
|
* @return mixed |
|
*/ |
|
public function __get($name) |
|
{ |
|
return isset($this->_currentConfig[$name]) ? $this->_currentConfig[$name] : NULL; |
|
} |
|
|
|
/** |
|
* 魔术函数设置一个配置值 |
|
* |
|
* @access public |
|
* @param string $name 配置名称 |
|
* @param mixed $value 配置值 |
|
* @return void |
|
*/ |
|
public function __set($name, $value) |
|
{ |
|
$this->_currentConfig[$name] = $value; |
|
} |
|
|
|
/** |
|
* 直接输出默认配置值 |
|
* |
|
* @access public |
|
* @param string $name 配置名称 |
|
* @param array $args 参数 |
|
* @return void |
|
*/ |
|
public function __call($name, $args) |
|
{ |
|
echo $this->_currentConfig[$name]; |
|
} |
|
|
|
/** |
|
* 判断当前配置值是否存在 |
|
* |
|
* @access public |
|
* @param string $name 配置名称 |
|
* @return boolean |
|
*/ |
|
public function __isSet($name) |
|
{ |
|
return isset($this->_currentConfig[$name]); |
|
} |
|
|
|
/** |
|
* 魔术方法,打印当前配置数组 |
|
* |
|
* @access public |
|
* @return string |
|
*/ |
|
public function __toString() |
|
{ |
|
return serialize($this->_currentConfig); |
|
} |
|
}
|
|
|