Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Class not Found

Não estou conseguindo identificar o erro no meu código. Pode me ajudar?

Erro:

/bin/php /home/satellitus/Documentos/php-primeiros-passos1/banco.php PHP Fatal error: Uncaught Error: Class 'Andrew\banco\Modelo\Pessoa' not found in /home/satellitus/Documentos/php-primeiros-passos1/src/Modelo/Conta/Titular.php:9 Stack trace:

#0 /home/satellitus/Documentos/php-primeiros-passos1/banco.php(11): require_once()

#1 [internal function]: {closure}()

#2 /home/satellitus/Documentos/php-primeiros-passos1/banco.php(24): spl_autoload_call()

#3 {main} thrown in /home/satellitus/Documentos/php-primeiros-passos1/src/Modelo/Conta/Titular.php on line 9

Process finished with exit code 255

Classe Titular:

namespace Andrew\banco\Modelo\Conta;

use Andrew\banco\Modelo\CPF; use Andrew\banco\Modelo\Endereco; use Andrew\banco\Modelo\Pessoa;

class Titular extends Pessoa { private $endereco;

public function __construct(CPF $cpf, string $nome, Endereco $endereco)
{
    parent::__construct($nome, $cpf);
    $this->endereco = $endereco;
}

public function recuperaEndereco(): Endereco
{
    return $this->endereco;
}

}

Classe Pessoa:

namespace Andrew\banco\Modelo;

class Pessoa { protected $nome; private $cpf;

public function __construct(string $nome, CPF $cpf)
{
    $this->validaNomeTitular($nome);
    $this->nome = $nome;
    $this->cpf = $cpf;
}

public function recuperaNome(): string
{
    return $this->nome;
}

public function recuperaCpf(): string
{
    return $this->cpf->recuperaNumero();
}

protected function validaNomeTitular(string $nomeTitular)
{
    if (strlen($nomeTitular)< 5) {
        echo "Nome precisa ter pelo menos 5 caracteres";
        exit();
    }
}

}

banco.php:

spl_autoload_register(function (string $nomeCompletoDaClasse) { $caminhoArquivo = str_replace('Andrew\Banco', 'src', $nomeCompletoDaClasse); $caminhoArquivo = str_replace('\', DIRECTORY_SEPARATOR, $caminhoArquivo); $caminhoArquivo .= '.php';

if (file_exists($caminhoArquivo)) {
    require_once $caminhoArquivo;
}

});

use Andrew\Banco\Modelo\Conta\Titular; use Andrew\Banco\Modelo\CPF; use Andrew\Banco\Modelo\Endereco; use Andrew\Banco\Modelo\Conta\Conta;

$endereco = new Endereco('Jundiaí', 'Jd Pitangueiras 2', 'Oswaldo de Andrade', '240'); $Bruno = new Titular(new CPF('123.456.789-12'), 'Andrew Souza', $endereco); $primeiraConta = new Conta($Bruno); $primeiraConta->depositar(500); $primeiraConta->sacar(300);// isso é ok

echo $primeiraConta->recuperaNomeTitular() . PHP_EOL; echo $primeiraConta->recuperaCpfTitular() . PHP_EOL; echo $primeiraConta->recuperarSaldo() . PHP_EOL;

$Kelly = new Titular(new CPF('987.654.321-10'), 'Kelly', $endereco); $segundaConta = new Conta($Kelly); var_dump($segundaConta);

$outroEndereco = new \Andrew\banco\Modelo\Endereco('Jundiaí', 'Vila Rami', 'José bedendo', '254'); $outra = new Conta(new Titular(new CPF('123.123.123-12'), 'Beles', $outroEndereco)); unset($outra); echo "Saldo de Contas ativas no sistema é de: " . Conta::recuperaNumeroDeContas();

1 resposta
solução!

Eu mesmo encontrei o problema kkkk Eu havia colocado o caminho em maiúsculo sendo que o namespace das classes que criei estavam em minúsculo.

Ao envés de colocar "banco" (tudo em minúsculo), coloquei "Banco"(com o 'B' em Maiúsculo).

spl_autoload_register(function (string $nomeCompletoDaClasse) { 
------> $caminhoArquivo = str_replace('Andrew\Banco', 'src',$nomeCompletoDaClasse); 
$caminhoArquivo = str_replace('\', DIRECTORY_SEPARATOR, $caminhoArquivo);
$caminhoArquivo .= '.php';

if (file_exists($caminhoArquivo)) {
    require_once $caminhoArquivo;
}
});

Valeu pessoal, espero ajudar quem precise e tenha dúvidas também rsrs

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software