Connection   A
last analyzed

Complexity

Total Complexity 6

Size/Duplication

Total Lines 74
Duplicated Lines 0 %

Importance

Changes 2
Bugs 0 Features 0
Metric Value
wmc 6
eloc 27
c 2
b 0
f 0
dl 0
loc 74
rs 10

4 Methods

Rating   Name   Duplication   Size   Complexity  
A getInstance() 0 18 3
A __clone() 0 2 1
A __construct() 0 2 1
A getConfig() 0 11 1
1
<?php
2
3
namespace ElePHPant;
4
5
/**
6
 * Class Connection
7
 */
8
class Connection
9
{
10
    /**
11
     *
12
     */
13
    private const OPTIONS = [
14
        \PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8",
15
        \PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION,
16
        \PDO::ATTR_DEFAULT_FETCH_MODE => \PDO::FETCH_OBJ,
17
        \PDO::ATTR_CASE => \PDO::CASE_NATURAL
18
    ];
19
20
    /**
21
     * @var
22
     */
23
    private static $instance;
24
    /**
25
     * @var
26
     */
27
    private static $configs;
28
29
    /**
30
     * Connection constructor.
31
     */
32
    final private function __construct()
33
    {
34
35
    }
36
37
    /**
38
     *
39
     */
40
    final private function __clone()
41
    {
42
    }
43
44
    /**
45
     * @return \PDO|null
46
     */
47
    public static function getInstance(): ?\PDO
48
    {
49
        if (empty(self::$instance)) {
50
            try {
51
                $config = self::getConfig();
52
                self::$instance = new \PDO(
53
                    "{$config->driver}:host={$config->host};dbname={$config->name};port={$config->port}",
54
                    $config->user,
55
                    $config->password,
56
                    self::OPTIONS
57
                );
58
59
            } catch (\PDOException $exception) {
60
                return null;
61
            }
62
63
        }
64
        return self::$instance;
65
    }
66
67
68
    /**
69
     * @return object
70
     */
71
    private static function getConfig(): object
72
    {
73
        self::$configs = new \stdClass();
74
        self::$configs->host = getenv('DB_HOST');
75
        self::$configs->user = getenv('DB_USER');
76
        self::$configs->password = getenv('DB_PASSWORD');
77
        self::$configs->name = getenv('DB_NAME');
78
        self::$configs->driver = getenv('DB_DRIVER');
79
        self::$configs->port = getenv('DB_PORT');
80
81
        return self::$configs;
82
    }
83
}