16
16
* You can obtain one at https://mozilla.org/MPL/2.0/.
17
17
* @license MPL-2.0 https://mozilla.org/MPL/2.0/
18
18
* @source https://github.com/wdes/simple-php-model-system
19
+ * @version 1.1.0
19
20
*/
20
21
21
22
/**
@@ -30,20 +31,54 @@ class Database
30
31
private $ dbConfig ;
31
32
32
33
/**
33
- * @var PDO
34
+ * @var PDO|null
34
35
*/
35
36
private $ connection ;
36
37
37
- /** @var self|null $instance */
38
- protected static $ instance = null ;
38
+ /** @var self[] $instances */
39
+ protected static $ instances = [] ;
39
40
40
- public function __construct (array $ config )
41
+ public const MAIN_CONNECTION = 0x1 ;
42
+ public const SECOND_CONNECTION = 0x2 ;
43
+ public const THIRD_CONNECTION = 0x2 ;
44
+
45
+ /**
46
+ * Build a Database object
47
+ *
48
+ * @param array $config
49
+ * @param int $connection Database::MAIN_CONNECTION, Database::SECOND_CONNECTION, Database::THIRD_CONNECTION
50
+ */
51
+ public function __construct (array $ config , int $ connection = self ::MAIN_CONNECTION )
41
52
{
42
- $ this ->dbConfig = $ config ['database ' ][$ config ['currentDatabaseEnv ' ]];
43
- self ::$ instance = $ this ;
53
+ if (! isset ($ config ['database ' ]) || ! isset ($ config ['currentDatabaseEnv ' ])) {
54
+ throw new Exception ('Invalid config to create the Database ' );
55
+ }
56
+
57
+ $ this ->dbConfig = $ config ['database ' ][$ config ['currentDatabaseEnv ' ]];
58
+ self ::$ instances [$ connection ] = $ this ;
44
59
}
45
60
46
61
/**
62
+ * @since 1.1.0
63
+ */
64
+ public function disconnect (): void
65
+ {
66
+ if ($ this ->connection !== null ) {
67
+ $ this ->connection = null ;
68
+ }
69
+ }
70
+
71
+ /**
72
+ * @since 1.1.0
73
+ */
74
+ public function __destruct ()
75
+ {
76
+ $ this ->disconnect ();
77
+ }
78
+
79
+ /**
80
+ * Connect to the database
81
+ *
47
82
* @throws PDOException when the connetion fails
48
83
*/
49
84
public function connect (): void
@@ -79,13 +114,23 @@ public function getConnection(): PDO
79
114
return $ this ->connection ;
80
115
}
81
116
82
- public static function getInstance (): self
117
+ /**
118
+ * Access the database instance
119
+ *
120
+ * @param int $connection Database::MAIN_CONNECTION, Database::SECOND_CONNECTION, Database::THIRD_CONNECTION
121
+ */
122
+ public static function getInstance (int $ connection = self ::MAIN_CONNECTION ): self
83
123
{
84
- if (self ::$ instance === null ) {
85
- throw new Exception ('The Database object was never created, use new Database() at least once ' );
124
+ if ((self ::$ instances [$ connection ] ?? null ) === null ) {
125
+ throw new Exception (
126
+ sprintf (
127
+ 'The Database object was never created (connection: %d), use new Database() at least once ' ,
128
+ $ connection
129
+ )
130
+ );
86
131
}
87
132
88
- return self ::$ instance ;
133
+ return self ::$ instances [ $ connection ] ;
89
134
}
90
135
91
136
/**
0 commit comments