Passed
Branch tests1.5 (af713c)
by Wanderson
01:19
created

Connection   A

Complexity

Total Complexity 7

Size/Duplication

Total Lines 50
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 15
dl 0
loc 50
rs 10
c 0
b 0
f 0
wmc 7

4 Methods

Rating   Name   Duplication   Size   Complexity  
A connect() 0 7 2
A validate() 0 3 2
A getPDO() 0 2 1
A isValid() 0 2 2
1
<?php
2
3
namespace Win\Database;
4
5
use PDO;
6
use PDOException;
7
use Win\DesignPattern\SingletonTrait;
8
use Win\Mvc\Application;
9
10
/**
11
 * Conexão com banco de dados
12
 *
13
 */
14
abstract class Connection {
15
16
	use SingletonTrait;
17
18
	/** @var PDO */
19
	protected $pdo;
20
21
	/** @var PDOException|null */
22
	protected $pdoException;
23
24
	/**
25
	 * Cria e retorna conexão PDO
26
	 * @param string[] $dbConfig
27
	 * @return PDO
28
	 */
29
	abstract protected function createPdo(&$dbConfig);
30
31
	/** @return PDO */
32
	final public function getPDO() {
33
		return $this->pdo;
34
	}
35
36
	/**
37
	 * Cria uma conexão com um banco de dados
38
	 * @param string[] $dbConfig
39
	 */
40
	public function connect($dbConfig) {
41
		try {
42
			$this->pdo = $this->createPdo($dbConfig);
43
			$this->pdo->exec("set names utf8");
44
			$this->pdoException = null;
45
		} catch (PDOException $ex) {
46
			$this->pdoException = $ex;
47
		}
48
	}
49
50
	/**
51
	 * Retorna TRUE caso a conexão tenha sido bem sucedida
52
	 * @return boolean
53
	 */
54
	public function isValid() {
55
		return (is_null($this->pdoException) && $this->pdo instanceof \PDO);
56
	}
57
58
	/**
59
	 * Redireciona para 503 caso a conexão tenha falhado
60
	 */
61
	public function validate() {
62
		if (!is_null($this->pdoException)):
63
			Application::app()->errorPage(503, $this->pdoException->getMessage());
64
		endif;
65
	}
66
67
}
68