Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Fala rapaziada.
Estou com um problema aqui referente ao spl_autoload_register, o autoload ta querendo carregar o PDO, eu já utilizei a contra barra "new \PDO", mas mesmo assim está querendo carregar o PDO. Alguém tem ideia do pq?
PHP Fatal error: Uncaught exception 'Exception' with message 'File /home/meusite/public_html/painel/classes/PDO.php not found in the path' in /home/meusite/public_html/painel/autoload/autoload.php:6
Desde já agradeço a ajuda, feliz natal pra todos vocês e fiquem com Deus.
Fala aew Bruno?
Não entendi por completo o problema, mas o que deu para perceber é que você está usando alguma função para carregar classes de forma automatizada, e sua função está querendo carregar até mesmo as classes nativas.
Bem eu tenho essa função.
Spoiler
<?php
/**
* *********************************************************************
* @function: Função para auto carregamento de classes
* *********************************************************************
* @autor: Spell Master
* @copyright (c) 2014, Spell Master AND Zeed
* *********************************************************************
*/
function __autoload($Class) {
// Liste aqui todas as pastas que contém arquivos de classes
$findDir = [
'../class/database',
'../class/helper',
'../class/PHPMailer',
];
$includeDir = null;
foreach ($findDir as $DirName) {
if (!$includeDir && file_exists(__DIR__ . "\\{$DirName}\\{$Class}.php") && !is_dir(__DIR__ . "\\{$DirName}\\{$Class}.php")) {
include_once (__DIR__ . "\\{$DirName}\\{$Class}.php");
$includeDir = true;
}
}
// Isso é opcional
// Caso a função não encontre o arquivo ela vai retornar isso como erro
if (!$includeDir) {
die("Erro ao incluir o arquivo: {$Class}.php");
}
}
Se for isso mesmo em "$findDir" coloque todos os diretórios onde estão suas classes.
Então toda vez que instanciar pelo operador new a função vai buscar a classe. Que também funciona lindamente com conceitos de herança nas classes.
>
Citar
$obj = new MinhaClass(); // Automaticamente a função vai dar include no arquivo MinhaClass.php
E se for esse o caso
>
Citar
class MinhaClass extends ClassePai {
// a função vai requisitar MinhaClass.php e ClassePai.php
}
Que também funciona com a classe sendo chamada dentro de outra classe
Se for esse seu caso fica aí uma boa solução.
Perfeito Omar, era exatamente isso, a minha função tava engolindo tudo de forma automatizada, o problema era que eu tava dando throw new exception quando não era encontrada a classe/arquivo, era aí que dava problema quando o autoload encontrava uma classe nativa do PHP (pdo,mysqli,datetime etc).
Minha função estava assim:
function autoloadClasses($class){
$class = str_replace("\\" , "/" , __DIR__) . "/" . str_replace("\\" , "/" , $class) . ".php";
if(!file_exists($class)){
throw new Exception("File path {$class} not found.");
}
require_once($class);
}
spl_autoload_register("autoloadClasses");
Eu tava dando um if(!file_exists($class)), ou seja, quando o autoload encontrava um new PDO ou new mysqli ou new Datetime, o meu autoload queria processar essas classes nativas também e no final das contas disparava um throw new exception pq PDO.php e mysqli.php e datetime.php não existe, aí eu inverti a lógica, fiz dessa forma:
function autoloadClasses($class){
$class = str_replace("\\" , "/" , __DIR__) . "/" . str_replace("\\" , "/" , $class) . ".php";
if(file_exists($class)){
require_once($class);
}
}
spl_autoload_register("autoloadClasses");
E funcionou liso, ou seja, eu tava disparando throw new exception desnecessariamente.
E valeu por ter passado seu código, vou botar ele aqui no servidor e estudar ele, vi que você fez de uma forma diferente e ficou bacana.
Valeu Omar, abração meu irmão, feliz natal aí pra você e sua família, fiquem com Deus.
Fala aí rapaziada.
Graças à ajudar da galera lá no grupo do Desenvolvimento Web no facebook, onde o joão aqui do fórum é admin, consegui resolver o problema.
Meu autoload tava disparando throw exception e iria disparar esse throw sempre que houvesse alguma classe nativa do PHP, ou seja, ele iria engolir qualquer classe nativa como new PDO, new Datetime, new mysqli e etc, e sempre iria disparar o throw pq eu tinha um if que fazia a seguinte verificação: