Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Usar função de autoload utilizando namespaces

Olá, na minha pasta do WAMP criei dois projetos, um com o nome do curso e outro com um nome de um projeto aleatório apenas para praticar, porém nas duas pastas existem as classes Categoria, ou seja, é gerado um conflito de nomes, por isso coloquei os namespaces em todas as classes. Com isso a função de autoload deixa de funcionar, alguma sugestão?

3 respostas

Se são dois projetos separados, é possível ter classes com o mesmo nome e isto não afeta a função autoload.

Fala Israel, beleza?

A função carregaClasse implementa o método require_once:

<?php

function carregaClasse($nomeDaClasse) {
    require_once("class/".$nomeDaClasse.".php");
}

Nesse caso estamos buscando todos os arquivos dentro da pasta class que terminam com a extensão .php. Como você está trabalhando com dois projetos, suas classes estão em pastas diferentes. Você teria que buscar as classes do seu segundo projeto pelo diretório dele =)

Entretanto, essa é uma forma de realizar autoload, aqui no manual da phpnet:

http://php.net/manual/pt_BR/language.oop5.autoload.php

você encontra algumas outras formas de realizar essa funcionalidade =)

Qualquer dificuldade, compartilhe com a gente!

solução!

Consegui resolver da seguinte maneira:

spl_autoload_register(function($classe){
    require_once str_replace( '\\', "/", __DIR__ . "/../" .  $classe) . '.php';
});

A variavel $classe passa: OSManager\classes\OsDao e com a função strreplace mudo as barras \ para / e uso _DIR para ajustar o caminho, que fica assim:

C:/xampp/htdocs/OSManager/../OSManager/classes/OsDao.php

No arquivo que cria o objeto fica assim:

$osDao = new OSManager\classes\OsDao($conexao);

Apenas lembrando, todo esse trabalho é pq já tenho mais uns 5 projetos na minha pasta htdocs e as vezes quando eu tento usar um new Produto() ele acaba usando a classe Produto de outro projeto, por isso a questão dos namespaces.

Está valendo dessa forma que fiz?