Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Pessoal, acho que estou tendo um problema na utilização de namespaces. Não sei se não pode ser no spl_autoload onde não estou carregando corretamente o arquivo referente a classe. Alguém poderia me ajudar?
Esse é o erro que me retorna:
Fatal error: Class 'Modelos\Pessoa' not found in /Users/guiwunsch/Projetos/Sigest/Src/tests/test.php on line 14
Vejam o meu código (tentei resumir o máximo possível):
Arquivo index.php:
<?php
use Config\Carregador,
Modelos\Pessoa;
require_once __DIR__ . '/../config/Carregador.Class.php';
//$carregador = Carregador::getInstance();
$carregador = new Carregador();
$carregador->incDiretorioRegistrado(__DIR__ . '/../*');
$carregador->incDiretorioIgnorado(__DIR__ . '/../libs/doctrine-orm/*');
$carregador->registrar();
$pessoa = new Pessoa();
$pessoa->setNome("Guilherme");
$pessoa->setVinculo(array(VINCULO_CLIENTE));
?>
Arquivo Pessoa.Class.php:
<?php
namespace Modelos;
//use Modelos\Interfaces\IVinculo;
class Pessoa //implements IVinculo
{
private $nome;
private $cpf;
private $rg;
public function Pessoa() { }
public function setNome($nome)
{
$this->nome = $nome;
}
public function getNome()
{
return $this->nome;
}
public function setCpf($cpf)
{
$this->cpf = $cpf;
}
public function getCpf()
{
return $this->cpf;
}
public function setRg($rg)
{
$this->rg = $rg;
}
public function getRg()
{
return $this->rg;
}
public function setVinculo($vinculo)
{
$this->vinculo = $vinculo;
}
}
Arquivo Carregador.Class.php:
<?php
namespace Config;
//use Libs\Singleton;
//require_once(__DIR__ . "/../libs/Singleton.Class.php");
class Carregador //extends Singleton
{
private $diretoriosRegistrados = array();
private $diretoriosIgnorados = array();
private $preparado;
/*
* Responsável por carregar automaticamente os arquivos PHP do sistema para que não seja necessário
* efetuar inclusões exaustivas desses arquivos.
*/
protected function Carregador()
{
parent::Singleton();
$this->preparado = false;
}
/*
* Prepara a lista de diretórios para adicionar na include path.
*/
private function preparar()
{
$incDir = array();
$excDir = array();
// Monta lista unificada com todos os diretórios registrados
foreach ($this->diretoriosRegistrados as $dir) {
if (substr($dir, -1) == '*') {
$dir = substr($dir, 0, -1);
$incDir = $this->varrerDiretorio($dir, $incDir);
} elseif (is_dir($dir) && is_readable($dir)) {
$incDir[] = $dir;
}
}
// Monta lista unificada com todos os diretórios a serem ignorados
foreach ($this->diretoriosIgnorados as $dir) {
if (substr($dir, -1) == '*') {
$dir = substr($dir, 0, -1);
$excDir = $this->varrerDiretorio($dir, $excDir);
} elseif (is_dir($dir) && is_readable($dir)) {
$excDir[] = $dir;
}
}
// Faz o merge das duas listas para montar o include path
$path = '';
foreach ($incDir as $dir) {
if (!in_array($dir, $excDir))
$path .= PATH_SEPARATOR . $dir;
}
set_include_path(get_include_path() . $path);
$this->preparado = true;
}
/*
* Varre diretórios recursivamente para montar lista.
*
* @parametro string $dirRaiz Diretório onde irá começar a busca recursiva
* @parametro array string $todoConteudo Lista de entrada que será concatenada a busca recursiva
* @retorno array string Lista com todos os diretórios encontrados
*/
private function varrerDiretorio($dirRaiz, $todoConteudo = array())
{
if (is_dir($dirRaiz) && is_readable($dirRaiz)) {
$todoConteudo[] = $dirRaiz;
$nomesInvisiveis = array(".", "..", ".htaccess", ".htpasswd");
$conteudoDir = scandir($dirRaiz);
foreach ($conteudoDir as $key => $conteudo) {
if (!in_array($conteudo, $nomesInvisiveis)) {
$dir = $dirRaiz . $conteudo . '/';
$todoConteudo = $this->varrerDiretorio($dir, $todoConteudo);
}
}
}
return $todoConteudo;
}
/*
* Adiciona diretório na lista de procura.
*
* @parametro string $dir Diretório
*/
public function incDiretorioRegistrado($dir)
{
$this->diretoriosRegistrados[] = $dir;
$this->preparado = false;
}
/*
* Adiciona diretório na lista de ignorados.
*
* @parametro string $dir Diretório
*/
public function incDiretorioIgnorado($dir)
{
$this->diretoriosIgnorados[] = $dir;
$this->preparado = false;
}
/*
* Registra essa classe na pilha de carregamento automático.
*/
public function registrar()
{
if (!$this->preparado)
$this->preparar();
spl_autoload_register(array($this, "carregar"));
}
/*
* Remove essa classe da pilha de carregamento automático.
*/
public function desregistrar()
{
spl_autoload_unregister(array($this, "carregar"));
}
/*
* Carrega determinada classe ou interface.
*
* @parametro string $classe Nome da classe para carregar.
*/
public function carregar($classe)
{
spl_autoload_extensions('.Class.php, .Inc.php');
spl_autoload($classe);
}
}
?>Carregando comentários...