Passed
Push — master ( 1faa1c...af7355 )
by Phillip
01:18
created

LazyPDO::pdo()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 7
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 6

Importance

Changes 0
Metric Value
cc 2
eloc 3
nc 2
nop 0
dl 0
loc 7
ccs 0
cts 6
cp 0
crap 6
rs 10
c 0
b 0
f 0
1
<?php
2
3
4
namespace Deployee\Components\Persistence;
5
6
/**
7
 * @mixin \PDO
8
 */
9
class LazyPDO
10
{
11
    /**
12
     * @var string
13
     */
14
    private $dsn;
15
16
    /**
17
     * @var string
18
     */
19
    private $username;
20
21
    /**
22
     * @var string
23
     */
24
    private $password;
25
26
    /**
27
     * @var array
28
     */
29
    private $options;
30
31
    /**
32
     * @var \PDO
33
     */
34
    private $pdo;
35
36
    /**
37
     * @param string $dsn
38
     * @param string $username
39
     * @param string $password
40
     * @param array $options
41
     */
42
    public function __construct(string $dsn, string $username = '', string $password = '', array $options = [])
43
    {
44
        $this->dsn = $dsn;
45
        $this->username = $username;
46
        $this->password = $password;
47
        $this->options = $options;
48
    }
49
50
    /**
51
     * @return string
52
     */
53
    public function getConnectionType(): string
54
    {
55
        return substr($this->dsn, 0, strpos($this->dsn, ':'));
56
    }
57
58
    public function __call($name, $arguments)
59
    {
60
        return call_user_func_array([$this->pdo(), $name], $arguments);
61
    }
62
63
    /**
64
     * @return \PDO
65
     */
66
    private function pdo(): \PDO
67
    {
68
        if($this->pdo === null){
69
            $this->pdo = new \PDO($this->dsn, $this->username, $this->password, $this->options);
70
        }
71
72
        return $this->pdo;
73
    }
74
}