Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Nerdmonkey

Falha ao carregar classes

Recommended Posts

Boa noite meus amigos,

 

Estou aqui mais uma vez pra pedir um pouco da atenção de vocês para um problema que vem me impedindo de dar continuidade ao meu trabalho que é o citado abaixo.

 

 

<br />
<b>Fatal error</b>: Class 'api\controllers\db\PDO' not found in <b>D:\Server\public_html\my_best\public\api\controllers\db\Conn.php</b> on line <b>20</b><br />

 

Vou aproveita pra encaixar outro problema que talvez seja o responsável por toda essa confusão que está sendo causadas nas dependências das minhas classes, que é o não funcionamento correto da classe __atutoload(). Simplesmente não funciona, tenho que incluir todas as classes manualmente, mas o detalhe é que, os demais métodos trabalham corretamente.

 

Eu já tentei várias e várias vezes mas, o problema é: como debugar o autoload? Se é que essa é a maneira mais adequada de se fazer isso, porque não consigo achar onde o código está quebrando.

 

 

<?php
namespace api;
 
class Init
{
    private $url;
    private $server;
    private $host;
    private $user;
    private $password;
    private $db;
 
    public function __construct()
    {
        $this->server = filter_input(INPUT_SERVER,'SERVER_NAME',FILTER_DEFAULT);
    }
 
    /**
     * Autoload class
     * @param $Class
     */
    public function __autoload($Class)
    {
        $cDir=[
            'controllers/db',
            'controllers/includes',
            'controllers/login',
            'controllers/templates'
        ];
        $iDir=null;
 
        foreach($cDir as $dirName):
            if(!$iDir && file_exists(__DIR__ . "/{$dirName}/" . ucfirst($Class) . ".php") && !is_dir(__DIR__ . "/{$dirName}/" . ucfirst($Class) . ".php")):
                include_once __DIR__ . "/{$dirName}/" . ucfirst($Class) . ".php";
                $iDir=true;
            endif;
        endforeach;
    }
 
    /**
     * @return string
     */
    protected function setHost()
    {
        if($this->server==='localhost'):
            $this->host = 'localhost';
        endif;
 
        return $this->host;
    }
 
    /**
     * @return string
     */
    protected function setUser()
    {
        if($this->server==='localhost'):
            $this->user = 'root';
        endif;
 
        return $this->user;
    }
 
    /**
     * @return string
     */
    protected function setPassword()
    {
        if($this->server==='localhost'):
            $this->password = '';
        endif;
 
        return $this->password;
    }
 
    /**
     * @return string
     */
    protected function setDb()
    {
        if($this->server==='localhost'):
            $this->db = 'app_conection';
        endif;
 
        return $this->db;
    }
 
    /**
     * Set the actually url
     */
    private function setUrl()
    {
        if($this->server==='localhost'):
            $this->url = 'http://localhost/public_html/my_best/public/';
        else:
            $this->url = '';
        endif;
 
        return $this->url;
    }
 
    /**
     * Return the actually url
     * @return string
     */
    public function getUrl()
    {
        $this->setUrl();
        return $this->url;
    }
}
 
Call on \index.php
 
$init = new \api\Init;

 

Mas como não funciona, estou chamando as classes manualmente, mas isso não é nem um pouco produtivo mesmo.

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá,

 

se você está no namespace "api\controllers\db" e usar:

 

$pdo = new PDO;

ele vai procurar a classe "api\controllers\db\PDO", se você quer a classe PDO você pode usar no começo do código, após o namespace:

 

use PDO;

ou simplesmente usar:

 

$pdo = new \PDO;

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.