Jump to content
Fórum Script Brasil
  • 0

Chamada de metodo estatico com spl_autoload_register


Jackson Junior

Question

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 to comment
Share on other sites

0 answers to this question

Recommended Posts

There have been no answers to this question yet

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.1k
    • Total Posts
      652k
×
×
  • Create New...