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

Erro ao implementar cpf em uma classe

Ele me retorna o seguinte erro: PHP Fatal error: Uncaught TypeError: Return value of Titular::getCpf() must be an instance of Cpf, string returned in C:\Users\Rodrigo\PhpstormProjects\poo\src\Titular.php:22 Stack trace:

#0 C:\Users\Rodrigo\PhpstormProjects\poo\src\Conta.php(65): Titular->getCpf()

#1 C:\Users\Rodrigo\PhpstormProjects\poo\src\banco.php(13): Conta->getCpfTitular()

#2 {main} thrown in C:\Users\Rodrigo\PhpstormProjects\poo\src\Titular.php on line 22

2 respostas

Segue os codigos

<?php
require_once 'Conta.php';
require_once 'Titular.php';
require_once 'Cpf.php';

$rodrigo = new Titular('Rodrigo', new Cpf('123.456.789-10'));
$contaUm = new Conta($rodrigo);
$contaUm->depositar(500);
$contaUm->sacar(100);
var_dump($contaUm);

echo $contaUm->getNomeTitular().PHP_EOL;
echo $contaUm->getCpfTitular().PHP_EOL;
echo $contaUm->getSaldo().PHP_EOL;

$julia = new Titular('Julia', new Cpf('987.654.321-10'));
$contaDois = new conta($julia);
$contaDois->depositar(500);
$contaDois->transferir(500, $contaUm);
var_dump($contaDois);

$teste = new Titular('Lucas', new Cpf('123.543.643-01'));
$outraConta = new Conta($teste);
unset($outraConta);

// método de acesso para uma classe
echo Conta::getNumeroDeContas();
<?php

class Titular
{
    private string $nome;
    private Cpf $cpf;

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

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

    public function getCpf(): Cpf
    {
        return $this->cpf->getCpf();
    }

    private function validarNomeTitular(string $nomeTitular)
    {
        if(strlen($nomeTitular) < 5) {
            echo "Nome precisa ter mais do que 5 letras";
            exit();
        }
    }

}
<?php

class Conta
{
    private Titular $titular;
    private float $saldo;
    private static int $numeroDeContas = 0;

    public function __construct(Titular $titular)
    {
        $this->titular = $titular;
        $this->saldo = 0;

        self::$numeroDeContas++;
    }

    //Garbage Collector
    public function __destruct()
    {
        self::$numeroDeContas--;
    }

    public function sacar(float $valorASacar): void
    {
        if($valorASacar > $this->saldo){
            echo "Saldo insuficiente";
        } else {
            $this->saldo -= $valorASacar;
        }

    }

    public function depositar(float $valorADepositar): void
    {
        if($valorADepositar < 0){
            echo "Valor precisa ser positivo";
        } else {
            $this->saldo += $valorADepositar;
        }
    }

    public function transferir(float $valorATransferir, Conta $contaDestino): void
    {
        if($valorATransferir > $this->saldo){
            echo "Saldo insuficiente";
        } else {
            $this->sacar($valorATransferir);
            $contaDestino->depositar($valorATransferir);
        }
    }

    public function getSaldo(): float
    {
        return $this->saldo;
    }

    public function getNomeTitular(): string
    {
        return $this->titular->getNome();
    }

    //Método de navegação entre classes
    public function getCpfTitular(): Cpf
    {
        return $this->titular->getCpf();
    }

    public static function getNumeroDeContas(): int
    {
        return self::$numeroDeContas;
    }

}
<?php

class Cpf
{
    public string $cpf;

    public function __construct(string $cpf)
    {
        $this->cpf = $cpf;
    }

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

solução!

Já achei o erro, favor ignorar.

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