8
8
* file that was distributed with this source code.
9
9
*/
10
10
11
- namespace WCM \WPStarter ;
12
-
13
- use Dotenv ;
11
+ namespace WCM \WPStarter \Env ;
14
12
15
13
/**
16
14
* Extends Dotenv to load and store all environment variables.
19
17
* @license http://opensource.org/licenses/MIT MIT
20
18
* @package WP Starter
21
19
*/
22
- class Env extends Dotenv
20
+ final class Env
23
21
{
24
22
/**
25
23
* @var array
26
24
*/
27
25
private static $ set = array ();
28
26
29
27
/**
30
- * @var bool
28
+ * @var static
31
29
*/
32
- private static $ loaded = false ;
30
+ private static $ loaded ;
33
31
34
32
/**
35
33
* @var array
@@ -166,92 +164,105 @@ class Env extends Dotenv
166
164
private static $ all ;
167
165
168
166
/**
169
- * @inheritdoc
167
+ * @var array
168
+ */
169
+ private $ vars ;
170
+
171
+ /**
172
+ * @param string $path
173
+ * @param string $file
174
+ * @return \WCM\WPStarter\Env\Env|static
170
175
*/
171
- public static function load ($ path , $ path = null )
176
+ public static function load ($ path , $ file = ' .env ' )
172
177
{
173
- if (! self ::$ loaded ) {
174
- if (is_null (self ::$ all )) {
175
- self ::$ all = array_merge (
176
- self ::$ isBool ,
177
- self ::$ isBoolOrInt ,
178
- self ::$ isInt ,
179
- self ::$ isMod ,
180
- self ::$ isString
181
- );
178
+ if (is_null (self ::$ loaded )) {
179
+ self ::wpConstants ();
180
+
181
+ if (! is_string ($ file )) {
182
+ $ file = '.env ' ;
182
183
}
183
- parent ::load ($ path , $ path );
184
- self ::$ loaded = true ;
184
+
185
+ $ filePath = rtrim ($ path , DIRECTORY_SEPARATOR ).DIRECTORY_SEPARATOR .$ file ;
186
+ $ loader = new Loader ($ filePath , true );
187
+ $ loader ->load ();
188
+ self ::$ loaded = new static ($ loader ->allVarNames ());
185
189
}
190
+
191
+ return self ::$ loaded ;
186
192
}
187
193
188
194
/**
189
- * Set a variable using putenv() and $_ENV.
190
- *
191
- * The environment variable value is stripped of single and double quotes.
192
- *
193
- * @param string $name
194
- * @param string|null $value
195
+ * @return array
195
196
*/
196
- public static function setEnvironmentVariable ( $ name , $ value = null )
197
+ public static function wpConstants ( )
197
198
{
198
- list ($ normName , $ normValue ) = self ::normalise ($ name , $ value );
199
-
200
- if (! is_null ($ normName ) && ! is_null ($ normValue ) && ! isset (self ::$ set [$ normName ])) {
201
- putenv ("{$ normName }= {$ normValue }" );
202
- $ _ENV [$ normName ] = $ normValue ;
203
- in_array ($ normName , self ::$ all , true ) and self ::$ set [$ normName ] = $ normValue ;
199
+ if (is_null (self ::$ all )) {
200
+ self ::$ all = array_merge (
201
+ self ::$ isBool ,
202
+ self ::$ isBoolOrInt ,
203
+ self ::$ isInt ,
204
+ self ::$ isMod ,
205
+ self ::$ isString
206
+ );
204
207
}
208
+
209
+ return self ::$ all ;
210
+ }
211
+
212
+ /**
213
+ * @param array $vars
214
+ */
215
+ public function __construct (array $ vars )
216
+ {
217
+ $ this ->vars = $ this ->process ($ vars );
205
218
}
206
219
207
220
/**
208
221
* Return all vars have been set
209
222
*
210
223
* @return array
211
224
*/
212
- public static function all ()
225
+ public function allVars ()
213
226
{
214
- return self :: $ set ;
227
+ return $ this -> vars ;
215
228
}
216
229
217
230
/**
218
- * Check constants values and return a 2 items array name/value.
219
- * Invalid values are returned as null.
220
- *
221
- * @param string $name
222
- * @param string $value
231
+ * @param array array
223
232
* @return array
224
233
*/
225
- private static function normalise ( $ name , $ value )
234
+ private function process ( array $ vars )
226
235
{
227
- list ($ normName , $ normValue ) = parent ::normaliseEnvironmentVariable ($ name , $ value );
236
+ $ values = array ();
237
+ $ constants = self ::wpConstants ();
238
+ foreach ($ vars as $ var ) {
239
+ $ value = getenv ($ var );
240
+ $ values [$ var ] = $ value ;
228
241
229
- if (empty ($ normName ) || is_null ($ normValue )) {
230
- return array (null , null );
231
- }
232
-
233
- switch (true ) {
234
- case in_array ($ normName , self ::$ isInt , true ):
235
- $ filtered = filter_var ($ normValue , FILTER_VALIDATE_INT );
236
- $ normValue = $ filtered === false ? null : (int ) $ filtered ;
237
- break ;
238
- case in_array ($ normName , self ::$ isBool , true ):
239
- $ normValue = (bool ) filter_var ($ normValue , FILTER_VALIDATE_BOOLEAN );
240
- break ;
241
- case in_array ($ normName , self ::$ isBoolOrInt , true ) :
242
- if (is_numeric ($ normValue )) {
243
- $ filtered = filter_var ($ normValue , FILTER_VALIDATE_INT );
244
- $ normValue = $ filtered === false ? null : (int ) $ filtered ;
245
- break ;
242
+ if (in_array ($ var , $ constants , true )) {
243
+ switch (true ) {
244
+ case in_array ($ var , self ::$ isInt , true ):
245
+ $ values [$ var ] = (int ) $ value ;
246
+ break ;
247
+ case in_array ($ var , self ::$ isBool , true ):
248
+ $ values [$ var ] = (bool ) filter_var ($ value , FILTER_VALIDATE_BOOLEAN );
249
+ break ;
250
+ case in_array ($ var , self ::$ isBoolOrInt , true ) :
251
+ if (is_numeric ($ value )) {
252
+ $ values [$ var ] = (int ) $ value ;
253
+ break ;
254
+ }
255
+ $ values [$ var ] = (bool ) filter_var ($ value , FILTER_VALIDATE_BOOLEAN );
256
+ break ;
257
+ case in_array ($ var , self ::$ isMod , true ) :
258
+ $ check = $ this ->checkMod ($ value );
259
+ is_null ($ check ) or $ values [$ var ] = $ check ;
260
+ break ;
246
261
}
247
- $ normValue = (bool ) filter_var ($ normValue , FILTER_VALIDATE_BOOLEAN );
248
- break ;
249
- case in_array ($ normName , self ::$ isMod , true ) :
250
- $ normValue = self ::checkMod ($ normValue );
251
- break ;
262
+ }
252
263
}
253
264
254
- return array ( $ normName , $ normValue ) ;
265
+ return $ values ;
255
266
}
256
267
257
268
/**
@@ -260,7 +271,7 @@ private static function normalise($name, $value)
260
271
* @param string $mod
261
272
* @return int|null
262
273
*/
263
- private static function checkMod ($ mod )
274
+ private function checkMod ($ mod )
264
275
{
265
276
if ($ mod [0 ] === '0 ' ) {
266
277
$ mod = substr ($ mod , 1 );
@@ -270,4 +281,4 @@ private static function checkMod($mod)
270
281
? octdec ($ mod )
271
282
: null ;
272
283
}
273
- }
284
+ }
0 commit comments