Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Bom dia, amigos
Estou aqui novamente a me bater com o PDO e POO
Estou utilizando uma classe singleton para fazer o acesso ao banco, segue a mesma:
<?php
class Conexao extends PDO {
private static $instancia;
public function Conexao($dsn, $username = "", $password = ""){
//Construtor do PDO
parent::__construct($dsn, $username, $password);
}
public static function getInstance() {
//Se não existir instancia, crio uma
if(!isset(self::$instancia)){
try {
self::$instancia = new Conexao("mysql:host=localhost;dbname=sistema", "root", "");
self::$instancia->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
echo 'Erro ao conectar: ' . $e->getMessage();
}
}
return self::$instancia;
}
}
Ao usar essa classe com includes nas demais funciona perfeitamente, porem se tento usar duas classes na mesma página me retorna o seguinte erro:
Fatal error: Cannot redeclare class Conexao in C:\wamp\www\Sistema\Includes\Classes\Connect.class.php on line 32
Esse erro aparece quando tento usar essas duas classes no mesmo arquivo:
Primeiro, a classe Lojas.class.php:
<?php
include("Connect.class.php");
class Loja {
/**
* Nome da Loja
* @param Loja
* @var string
*/
private $loja;
/**
* ID da loja
*@param id_loja
*@var int
*/
private $id_loja;
//Instancia do banco
private $db;
/**
* Método construtor
* seta a instancia do banco
*/
public function __construct(){
$this->db = Conexao::getInstance();
}
/*
* function getLoja
* procura pelas lojas no banco de dados
* @return query result
*/
protected function getLoja(){
try {
$sql = "SELECT * FROM lojas";
$query = $this->db->query($sql);
} catch (PDOException $e) {
echo 'Houve um erro, procure um administrador do sistema: ' . $e->getMessage();
}
return $query;
}
public function combobox() {
$query = self::getLoja();
while($row = $query->fetch()){
echo '<option value="' . $row['idLojas'] . '">' . $row['Loja'] . '</option>';
}
}
}
Depois a classe Entradas.class.php:
<?php
include("Connect.class.php");
Class Entradas {
/**
* loja
* @param string
*/
private $loja;
/**
* data
* formato year/month/day
* @param string
*/
private $data;
/**
* valor_dinheiro
* valor recebido em dinheiro
* @param decimal(15,2)
*/
private $valor_dinheiro;
/**
* valor_visa
* valor recebido no cartão visa
* @param decimal(15,2)
*/
private $valor_visa;
/**
* valor_master
* valor recebido no cartão mastercard
* @param decimal(15,2)
*/
private $valor_master;
/**
* valor_cheque
* valor recebido em cheque
* @param decimal(15,2)
*/
private $valor_cheque;
/**
* valor_total
* valor total recebido no dia ($valor_dinheiro + $valor_visa + $valor_master + $valor_cheque)
* @param decimal(15,2)
*/
private $valor_total;
//Instancia do banco de dados
private $db;
public function __construct(){
$this->db = Conexao::getInstance();
}
/**
* function converte_data
* converte data no formato br para o formato eua
* @return string
*/
protected function converte_data($str){
return $str = implode('-', array_reverse(explode('/', $str)));
}
public function setLoja($str){
$this->loja = $str ;
}
public function setData($str) {
$this->data = $this->converte_data($str);
}
public function getData() {
echo $this->data;
}
public function setDinheiro($str){
$this->valor_dinheiro = $str;
}
public function setVisa($str){
$this->valor_visa = $str;
}
public function setMaster($str){
$this->valor_master = $str;
}
public function setCheque($str){
$this->valor_cheque = $str;
}
public function setTotal(){
$this->valor_total = $this->valor_dinheiro + $this->valor_visa + $this->valor_master + $this->valor_cheque;
}
/**
* function incluiaEntrada
* inclui uma nova entrada no banco
* return boolean
*/
public function inclui_entrada(){
try {
$sql = "INSERT INTO entradas VALUES ('', :data, :loja, :dinheiro, :cheque, :visa, :master, :total)";
$query = $this->db->prepare($sql);
$query->bindParam(':data', $this->data, PDO::PARAM_STR);
$query->bindParam(':loja', $this->loja, PDO::PARAM_STR);
$query->bindParam(':dinheiro', $this->valor_dinheiro, PDO::PARAM_INT);
$query->bindParam(':cheque', $this->valor_cheque, PDO::PARAM_INT);
$query->bindParam(':visa', $this->valor_visa, PDO::PARAM_INT);
$query->bindParam(':master', $this->valor_master, PDO::PARAM_INT);
$query->bindParam(':total', $this->valor_total, PDO::PARAM_INT);
$query->execute();
} catch (PDOException $e) {
echo 'Houve um erro na operação: ' . $e->getMessage();
}
return TRUE;
}
}
Edit: se comentar o include da classe Entradas o comportamento funciona automaticamente. Alguem arrisca me dizer o porque?
Carregando comentários...