1: <?php
2: 3: 4: 5: 6: 7: 8: 9:
10:
11: namespace Kotchasan;
12:
13: 14: 15: 16: 17: 18: 19:
20: final class Database extends KBase
21: {
22: 23: 24: 25: 26:
27: private static $instances = array();
28:
29: 30: 31: 32: 33: 34: 35:
36: public static function create($name = 'mysql')
37: {
38: $param = (object) array(
39: 'settings' => (object) array(
40: 'driver' => 'PdoMysql',
41: 'char_set' => 'utf8',
42: 'dbdriver' => 'mysql',
43: 'hostname' => 'localhost',
44: ),
45: 'tables' => (object) array(
46: ),
47: );
48: if (is_string($name)) {
49:
50: if (isset(self::$cfg->database[$name]) && is_array(self::$cfg->database[$name])) {
51: foreach (self::$cfg->database[$name] as $key => $value) {
52: $param->settings->$key = $value;
53: }
54: }
55: if (empty(self::$instances[$name])) {
56: if (is_file(APP_PATH.'settings/database.php')) {
57: $config = include APP_PATH.'settings/database.php';
58: } elseif (is_file(ROOT_PATH.'settings/database.php')) {
59: $config = include ROOT_PATH.'settings/database.php';
60: }
61: foreach ($config as $key => $values) {
62: if ($key == $name) {
63: foreach ($values as $k => $v) {
64: $param->settings->$k = $v;
65: }
66: } elseif ($key == 'tables') {
67: foreach ($values as $k => $v) {
68: $param->tables->$k = $v;
69: }
70: }
71: }
72: }
73: } elseif (is_array($name)) {
74: foreach ($name as $k => $v) {
75: $param->settings->$k = $v;
76: }
77: $name = rand();
78: }
79: if (empty(self::$instances[$name])) {
80:
81: require_once VENDOR_DIR.'Database/Driver.php';
82:
83: if (is_file(VENDOR_DIR.'Database/'.$param->settings->driver.'Driver.php')) {
84: $class = $param->settings->driver.'Driver';
85: } else {
86:
87: $class = 'PdoMysqlDriver';
88: }
89: require_once VENDOR_DIR.'Database/'.$class.'.php';
90: $class = 'Kotchasan\\Database\\'.$class;
91: self::$instances[$name] = new $class();
92: self::$instances[$name]->connect($param);
93: }
94:
95: return self::$instances[$name];
96: }
97: }
98: