Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Estou com um projeto onde tentei fazer utilização deste recurso do Autoload, fiz implementação da mesma forma que você apresenta, sendo que estou usando da seguinte forma:
<?php
function __autoload($classes){
echo $classes.;
$pastas = array(br.com.config,
br.com.dao,
br.com.facade,
br.com.model,
br.com.util
);
$path = get_include_path();
foreach ($pastas as $pasta) {
$arquivo = $path.\\.$pasta.\\.$classes..class.php;
if(file_exists($arquivo)){
require_once($arquivo);
}
}
}
?>
Tenho um sistema como pacotes, porém sempre ele apresenta que a classe não foi encontrada, consegue visualizar algum problema, ou tem alguma sugestão do que possa ser?
A instancia da classe que esta sendo feita ele não pega, este autoload esta em um arquivo separado chamado Load, mas para teste eu coloquei a função dentro do próprio cadMenu.php é apresenta o erro que existe duas declarações de autoload, para remover uma das, logo entendo que esta vendo o mesmo, porém nem o echo é exibido, apagando o autoload do outro arquivo e deixando somente o do próprio cadMenu.php para teste ele apresenta o mesmo erro.
Já não sei mais o que fazer para isto funcionar, estou usando no projeto já as declarações como a abaixo,é funciona normal:
include_once br.com.model/MenuFacade.class.php;
OBS: Tenho outros projetos aqui que o AutoLoad funciona normal, já não sei mais o que fazer. Se puder ajudar agradeço muito...Tenho fiz o curso que você apresentou sobre Boas Práticas é ele funciona, porém neste projeto apresenta este erro e não da certo.
Desde já agradeço a atenção.
A função get_include_path() retorna todos os caminhos do includ_path separados pelo PATH_SEPARATOR, que geralmente é ';'.
O melhor é já adicionar todos os caminhos possíveis ao include_path, assim:
$pastas = array(
realpath('br.com.config'),
realpath('br.com.dao'),
realpath('br.com.facade'),
realpath('br.com.model'),
realpath('br.com.util'),
);
// Obs: tenha certeza que esses caminhos existam ou realpath irá retornar false.
set_include_path( get_include_path() . PATH_SEPARATOR . implode(PATH_SEPARATOR, $pastas) );
Depois faça o seu autoload
function __autoload($classe) {
// Se todos os arquivos são .class.php
$arquivo = $classe . ".class.php";
if(file_exists($arquivo)){
Uma dica: Diferentes sistemas operacionais usam caracteres distintos como separador entre diretórios. O Windows usa '\', mas o Linux usar '/'. Para fazer scripts compatíveis com ambos os sistemas, recomenda-se usar a constante pré-definida DIRECTORY_SEPARATOR no lugar de '/' ou '\'.