读取4中配置的表信息,现支持php.ini,xml.yaml

jackxiang 2010-3-1 14:12 | |


<?php
/**
* 读取4中配置的表信息,现支持php.ini,xml.yaml
*/
class Settings{
var $_settings = array();
/**
    * 获取某些设置的值
    *
    * @param unknown_type $var
    * @return unknown
    */
       function get($var) {
         $var = explode('.', $var);

         $result = $this->_settings;
         foreach ($var as $key) {
                   if (!isset($result[$key])) { return false; }

                   $result = $result[$key];
         }

         return $result;


        // trigger_error ('Not yet implemented', E_USER_ERROR);//引发一个错误
       }

       function load() {
            trigger_error ('Not yet implemented', E_USER_ERROR);
       }


}
/**
* 针对PHP的配置,如有配置文件
* $file=
<?php
$db = array();

// Enter your database name here:
$db['name'] = 'test';

// Enter the hostname of your MySQL server:
$db['host'] = 'localhost';

?>


具体调用:
include ('settings.php'); //原始环境假设每个类为单独的一个类名.php文件

// Load settings (PHP)
$settings = new Settings_PHP;
$settings->load('config.php');

echo 'PHP: ' . $settings->get('db.host') . '';

*
*/
Class Settings_PHP Extends Settings {
function load ($file) {
         if (file_exists($file) == false) { return false; }

         // Include file
         include ($file);
unset($file);   //销毁指定变量
$vars = get_defined_vars(); //返回所有已定义变量的列表,数组,变量包括服务器等相关变量,
//通过foreach吧$file引入的变量给添加到$_settings这个成员数组中去.
foreach ($vars as $key => $val) {
         if ($key == 'this') continue;

         $this->_settings[$key] = $val;
}

}



}


//////////////////////读取INI文件,主要用到parser_ini_file函数,该函数返回一个数组,如第二个参数为true时则返回多维数组/////////////////////////////////////////
/**
* ini例子:
* [db]
name = test
host = localhost
调用例子:
$settings = new Settings_INI;
$settings->load('config.ini');
echo 'INI: ' . $settings->get('db.host') . '';

*
*/
Class Settings_INI Extends Settings {
function load ($file) {
         if (file_exists($file) == false) { return false; }
         $this->_settings = parse_ini_file ($file, true);
}
}

//////////////////////读取XML文件,需要用到XML_PARSER//////////////////////////////////////////////////////////
/**
* XML例子:
    <?xml version="1.0" encoding="UTF-8"?>
<settings>
         <db>
                   <name>test</name>
                   <host>localhost</host>
         </db>
</settings>
调用例子:
// Load settings (XML)
$settings = New Settings_XML;
$settings->load('config.xml');
echo 'XML: ' . $settings->get('db.host') . '';

*
*/
Class Settings_XML Extends Settings {
function load ($file) {
       if (file_exists($file) == false) { return false; }

       /**xmllib.php为PHP XML Library, version 1.2b,相关连接:http://keithdevens.com/software/phpxml
       xmllib.php主要特点是把一个数组转换成一个xml或吧xml转换成一个数组
       XML_unserialize:把一个xml给转换 成一个数组
       XML_serialize:把一个数组转换成一个xml
       自PHP5起,simpleXML就很不错,但还是不支持将xml转换成数组的功能,所以xmlLIB还是很不错的.
       */
       include ('xmllib.php');  
       $xml = file_get_contents($file);
       $data = XML_unserialize($xml);
       $this->_settings = $data['settings'];
}

}
//////////////////////////////////读取YAML格式文件///////////////////////////////////////////////
/**
使用YAML必须使用到SPYC这个库,相关链接在http://spyc.sourceforge.net/
YAML配置例子:
db:
   name: test
   host: localhost


*/
Class Settings_YAML Extends Settings {
function load ($file) {
       if (file_exists($file) == false) { return false; }

       include ('spyc.php');
       $this->_settings = Spyc::YAMLLoad($file);
}
}

作者:jackxiang@向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除
地址:https://jackxiang.com/post/2750/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!

评论列表
发表评论

昵称

网址

电邮

打开HTML 打开UBB 打开表情 隐藏 记住我 [登入] [注册]