Bom Dia! Estou com esse erro na estrutura de classe. Fatal error: Class 'Alura\Modelo\Pessoa' not found in C:\laragon\www\projeto\src\Modelo\Conta\Titular.php on line 18 Poderiam me ajudar?
Bom Dia! Estou com esse erro na estrutura de classe. Fatal error: Class 'Alura\Modelo\Pessoa' not found in C:\laragon\www\projeto\src\Modelo\Conta\Titular.php on line 18 Poderiam me ajudar?
Fala, Márcio.
Falout incluir o arquivo da classe Pessoa
antes do arquivo da classe Titular
.
require_once 'autoload.php';
use Alura\Modelo\Conta\Pessoa; use Alura\Modelo\Conta\Titular; use Alura\Modelo\Conta\Conta; use Alura\Modelo\Endereco; use Alura\Modelo\Cpf; use Alura\Modelo\Funcionario;
Bom dia! Tudo bem Vinícios?
Coloquei do jeito que está acima no arquivo banco.php, porém, continua dando o mesmo erro.
Opa, Márcio.
Sempre que for postar código aqui, coloque entre 3 crases (`). Assim o código fica formatado e facilita a leitura. ;-)
Nesse seu último post você tem use Alura\Modelo\Conta\Pessoa;
. Já na classe Titular
você está tentando acessar Alura\Modelo\Pessoa. Onde realmente está o arquivo da classe
Pessoa? Tem que importar a classe correta com o
use`.
Depois de conferir isso e acertar, se o erro persistir, posta aqui sua estrutura de pastas e o conteúdo do arquivo autoload.php
, por favor.
A estrutura de pastas está definida assim, pasta projeto dentro da pasta www do laragon, em seguida a pasta src juntamente com os arquivos autoload.php, banco.php e teste-saque.php. Depois então vem a pasta Modelo que está dentro da pasta src com os seguintes arquivos e pasta, Cpf.php, Endereco.php, Funcionario.php, Pessoa.php e a pasta Conta com os arquivos Conta.php, Titular.php, ContaCorrente.php e ContaPoupanca.php. Essa é a estrutura que eu acompanhei no treinamento.
spl_autoload_register(function (string $nomeCompletoDaClasse) {
$caminhoArquivo = str_replace('Alura\\', 'src', $nomeCompletoDaClasse);
$caminhoArquivo = str_replace('\\', 'DIRECTORY_SEPARATOR', $caminhoArquivo);
$caminhoArquivo .= '.php';
if (file_exists($caminhoArquivo)) {
require_once $caminhoArquivo;
}
});
<?php
namespace Alura\Modelo\Conta;
use Alura\Modelo\Pessoa;
use Alura\Modelo\Cpf;
use Alura\Modelo\Endereco;
class Titular extends Pessoa
{
private $endereco;
public function __construct(Cpf $cpf, string $nome, Endereco $endereco)
{
parent::__construct($nome, $cpf);
$this->endereco = $endereco;
}
public function getEndereco(): Endereco
{
return $this->endereco;
}
}
Putz, você está usando Laragon pra esse treinamento? Por que? Rsrsrsr
Enfim...
Seu arquivo autoload.php
está dentro da pasta src
? Porque nele você está tentando entrar de novo na pasta src
, dentro da src
. Esse é o problema.
Seu file_exists
está sempre retornando false, porque o caminho está errado.
;-)
Vou deixar você tentar corrigir sem ter dar a solução. Se não conseguir, posta aqui que te mostro. rs
Não! O arquivo autoload.php está na raiz.
spl_autoload_register(function (string $nomeCompletoDaClasse)
{
$caminhoArquivo = str_replace('Alura\\Banco', 'src', $nomeCompletoDaClasse);
$caminhoArquivo = str_replace('\\', 'DIRECTORY_SEPARATOR', $caminhoArquivo);
$caminhoArquivo .= '.php';
if (file_exists($caminhoArquivo))
{
require_once $caminhoArquivo;
}
});
Nessa última mensagem você mudou o namespace da sua aplicação, Márcio? Não entendi.
Coloca seu projeto no github e manda, por favor, pra eu tentar te ajudar?
Márcio, consegui executar seu arquivo teste-saque.php
sem nenhum erro.
Aparentemente está tudo certo. Você continua recebendo algum erro?
Aqui pra mim fala que a classe Pessoa não existe. Acho que é algum problema na estrutura física das pasta. Já tentei executar de várias formas, porémz sem sucesso.
Como você está executando?
Estou executando no browser.
Quando executo a classe funcionário no browser, fala que a classe pessoa não foi encontrada.
Primeiro: por que você está executando no browser?
Segundo: qual arquivo você está executando no browser?
Eu estou usando o vscode e, para visualizar o resultado, eu vendo o resultado no browser
Não faz sentido visualizar o que a gente fez até aqui no browser. Usar VS Code não tem nada a ver com como você executa o arquivo.
De qualquer forma, você não respondeu minha pergunta.
Qual arquivo você está tentando acessar no browser?
O arquivo teste-saque.php está exibindo o resultado certinho. Porém, quando tento visualizar o arquivo Titular.php, está aparecendo um fatal error dizendo que não existe a classe Pessoa.php
Ah, Mácio...
Então você ainda não entendeu como o PHP funciona.
Se você está tentando executar o arquivo Titular.php
, o que você espera que aconteça?
Esse arquivo contém apenas a definição de uma classe, e nada sendo executado.
Além disso, para que essa classe seja definida, as classes que ela precisa (Pessoa
, por exemplo) precisam existir. No arquivo Titular.php
você não inclui o autoloader ou os arquivos específicos necessários, então obviamente não funcionaria.
Por isso nós temos os arquivos banco.php
e teste-saque.php
. Esses arquivos são os pontos de entrada de nossa aplicação e realmente executam códigos. Nestes arquivos, nós além de incluírmos o autoloader, utilizamos a classe Titular
.
Até aí eu entendi Vinícios, mas, não era suposto que mesmo tentando executar a classe Titular.php, ela não retornasse nenhum erro?
Não, não era.
Como o arquivo Titular.php
vai saber onde encontrar a classe Pessoa
?
Através da importação e do autoload?
Então.
Alguma dessas coisas foi feita no arquivo Titular.php
?
Não. E nem deveria, porque o arquivo Titular.php
não é um arquivo feito para você executar diretamente.
Por que você tentou executá-lo diretamente dessa forma?
Queria somente certificar que nenhum arquivo possuía erros. Obrigado pela força Vinícios.
Para verificar que um arquivo não possui erro, execute no terminal:
php -l nome-arquivo.php
Não o execute.
;-)
Não esquece de marcar o tópico como solucionado, Márcio.
;-)