Tengo varias clases, una para categorías, marcas, etc.
Uso el patrón Singleton, pero al llamar a más de una clase, me sale este mensaje:
Fatal error: Cannot redeclare class Database in F:\xampp\htdocs\ruben\compra2\inc\class\dbConnect. php on line 2
Les pongo la clase de conexión y 2 de las otras para ver como es que puedo evitar este error:
Clase dbConnect:
Código PHP:
class Database {
static private $instance;
private $conn;
private function __construct() {
try{
$this->conn = new PDO('mysql:host=localhost;dbname=compras', 'root', 'kadmi2013');
$this->conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$this->conn->exec("SET CHARACTER SET utf8");
}catch(PDOException $e){
echo "ERROR: " . $e->getMessage();
}
}
public static function singletonConection() {
if (!isset(self::$instance)) {
$miclase = __CLASS__;
self::$instance = new $miclase;
}
return self::$instance;
}
public function prepare($sql) {
return $this->conn->prepare($sql);
}
public function __clone() {
trigger_error('La clonación de este objeto no está permitida.', E_USER_ERROR);
}
}
Código PHP:
require("dbConnect.php");
class tipoDocumentos {
static private $instance;
private $conn;
private $error = 0;
private $result;
const TABLA = "tipo_documento";
//Constructor
private function __construct() {
$this->conn = Database::singletonConection();
}
public static function singletonTipoDocumento() {
if (!isset(self::$instance)) {
$miclase = __CLASS__;
self::$instance = new $miclase;
}
return self::$instance;
}
//Listar select tipo de documento
public function listaTipoDocumento($tipoDocumento = null) {
try {
$sql = "SELECT * FROM " . self::TABLA . " ORDER BY nombre";
$query = $this->conn->prepare($sql);
if (!$query->execute()) {
$this->error = 1;
}
else {
$nr = $query->rowCount();
if ($nr > 0) {
while ($row = $query->fetch(PDO::FETCH_NUM)) {
if ($row[0] == $tipoDocumento) {
$this->result .= "<option value='" . $row[0] . "' selected>" . $row[1] . "</option>";
}
else {
$this->result .= "<option value='" . $row[0] . "'>" . $row[1] . "</option>";
}
}
}
else {
$this->result = "<option value=''>No hay tipos de documentos</option>";
}
$this->conn = null;
return $this->result;
}
} catch (PDOExeption $e) {
return "Error: " . $e->getMessage();
}
return $this->error;
}
public function __clone() {
trigger_error('La clonación no está permitida para este objeto.', E_USER_ERROR);
}
}
Código PHP:
require("dbConnect.php");
class Provincia {
static private $instance;
private $conn;
private $error = 0;
private $result;
const TABLA = "provincias";
//Constructor
private function __construct() {
$this->conn = Database::singletonConection();
}
public static function singletonProvincias() {
if (!isset(self::$instance)) {
$miclase = __CLASS__;
self::$instance = new $miclase;
}
return self::$instance;
}
//Listar select provincias
public function listaProvincias($provincia = null) {
try {
$sql = "SELECT * FROM " . self::TABLA . " ORDER BY nombre";
$query = $this->conn->prepare($sql);
if (!$query->execute()) {
$this->error = 1;
}
else {
$nr = $query->rowCount();
if ($nr > 0) {
while ($row = $query->fetch(PDO::FETCH_NUM)) {
if ($row[0] == $provincia) {
$this->result .= "<option value='" . $row[0] . "' selected>" . $row[1] . "</option>";
}
else {
$this->result .= "<option value='" . $row[0] . "'>" . $row[1] . "</option>";
}
}
}
else {
$this->result = "<option value=''>No hay provincias</option>";
}
$this->conn = null;
return $this->result;
}
} catch (PDOExeption $e) {
return $e->getMessage();
}
return $this->error;
}
public function __clone() {
trigger_error("La clonación no está permitida para este objeto.", E_USER_ERROR);
}
}