Tenho tido um problema ao chamar um método estático de uma classe singleton de conexao.
Segue estrutura:
|-Classes
|-- Clientes.class.php
|-- Conexao.class.php
Index.php
autoload.php
Index.php
<?php
include "autoload.php";
use classes\Clientes;
$cliente = new Clientes();
$getClientes = $cliente->getClientes();
echo '<pre>';
print_r($getClientes);
<?php
namespace classes;
class Clientes {
public $conn;
public function __construct(){
$this->conn = Conexao::getInstance();
}
public function getClientes(){
$query = $this->conn->query("SELECT * FROM " . Conexao::getTabela('TB_CLIENTES'));
foreach($query->fetchAll(PDO::FETCH_ASSOC) as $cliente) {
$clientes = $cliente['cnpj'] . '<br>';
}
return $clientes;
}
}
Conexao.class.php
<?php
namespace classes;
/**
* Classe Singleton para Conexao ao banco de dados
*
* @author Marcos de P. Muniz
* @version 1.0
*/
class Conexao
{
/**
* Instancia de conexao PDO
* @var PDO
*/
private static $instance = null;
/**
* Tipo do banco de dados
*
* Pode ser:
* <li>MySQL</li>
* <li>PostgreSQL</li>
* <li>SQL Server</li>
* <li>Oracle</li>
* <li>SQLite</li>
* @var string
*/
private static $dbType = "mysql";
/**
* Host do banco de dados
* @var string
*/
private static $host = "127.0.0.1";
/**
* Usuario de conexao ao banco de dados
* @var string
*/
private static $user = "root";
/**
* Senha de conexao ao banco de dados
* @var string
*/
private static $senha = "usbw";
/**
* Nome do banco de dados
* @var string
*/
private static $db = "desknfe";
/**
* Se a conexao deve ser persistente
* @var boolean
*/
protected static $persistent = false;
/**
* Lista de tabelas do banco de dados
*
* Esta lista serve para padronizar a utilizacao das tabelas nas consultas
* para caso seja necessario alterar o nome de alguma tabela o impacto na
* programacao seja o minimo possivel.
* @var array
*/
private static $tabelas = array(
'TB_CLIENTES' => 'clientes',
'TB_NFE' => 'nfe'
);
/**
* Retorna a instancia de conexao ao banco de dados
*
* Caso a instancia de conexao já exista, apenas a retorna, caso ainda
* não exista, cria a instancia e a retorna.
*
* @return PDO
*/
public static function getInstance()
{
if(self::$persistent != FALSE)
self::$persistent = TRUE;
if(!isset(self::$instance)){
try {
self::$instance = new \PDO(self::$dbType . ':host=' . self::$host . ';dbname=' . self::$db
, self::$user
, self::$senha
, array(\PDO::ATTR_PERSISTENT => self::$persistent));
} catch (\PDOException $e) {
exit ("Erro ao conectar com o banco de dados: " . $e->getMessage());
}
}
return self::$instance;
}
/**
* Fecha a instancia de conexao ao banco de dados
*/
public static function close()
{
if (self::$instance != null)
self::$instance = null;
}
/**
* Retorna a tabela correspondente a chave informada.
*
* @param string $chave Nome da chave do array $tabelas que armazena a tabela a ser retornada
* @return string
*/
public static function getTabela($chave)
{
return self::$tabelas[$chave];
}
}
Quando a classe Clientes é instanciada dá o seguinte erro:
Warning: require_once(classes/PDO.class.php): failed to open stream: No such file or directory in C:\DeskNFe\root\nfe\autoload.php on line 4
Fatal error: require_once(): Failed opening required 'classes/PDO.class.php' (include_path='.;C:\php\pear') in C:\DeskNFe\root\nfe\autoload.php on line 4
Utilizando fora do namespace, funciona normalmente.
Pergunta
Jackson Junior
autoload.php
Clientes.class.php
Conexao.class.php
Quando a classe Clientes é instanciada dá o seguinte erro:
Warning: require_once(classes/PDO.class.php): failed to open stream: No such file or directory in C:\DeskNFe\root\nfe\autoload.php on line 4
Fatal error: require_once(): Failed opening required 'classes/PDO.class.php' (include_path='.;C:\php\pear') in C:\DeskNFe\root\nfe\autoload.php on line 4
Utilizando fora do namespace, funciona normalmente.
Alguém pode enxergar meu erro no código?
Obg.
Link para o comentário
Compartilhar em outros sites
0 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.