Ir para conteúdo
Fórum Script Brasil

Jackson Junior

Membros
  • Total de itens

    1
  • Registro em

  • Última visita

Posts postados por Jackson Junior

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

×
×
  • Criar Novo...