Ir para conteúdo
Fórum Script Brasil
  • 0

Chamada de metodo estatico com spl_autoload_register


Jackson Junior

Pergunta

Olá pessoal.
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);

autoload.php

spl_autoload_register(function ($class) {
    require_once(str_replace('\\', '/', $class . '.class.php'));
});

Clientes.class.php

<?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.

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

Até agora não há respostas para essa pergunta

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...