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

Problema com chamada de classe CPF

Olá, bom dia a todos.

Gostaria de saber o porquê de como o código está o terminal não conseguir converter o tipo string para o tipo Cpf, analizei e não cheguei a uma conclusão, a meu ver devia funcionar pois é semelhante a como o orientador Vinícius fez.

arquivo banco.php:

<?php

require_once "src/conta.php";
require_once "src/Titular.php";
require_once "src/Cpf.php";

$douglas = new Titular("Douglas Augusto");
$cpfDouglas = new Cpf("123.456.789-10");
$primeiraConta = new Conta($cpfDouglas, $douglas);

$stella = new Titular("Stella Britto");
$cpfStella = new Cpf("123.456.789-09");
$segundaConta = new Conta($cpfStella, $stella);

$barney = new Titular("Barney Cachorro");
$cpfBarney = new Cpf("321.654.987-01");
$terceiraConta = new Conta($cpfBarney, $barney);

$primeiraConta->deposita(1500);
$primeiraConta->saca(300); 

echo $primeiraConta->mostraNomeTitular() . PHP_EOL;
echo $primeiraConta->mostraCpfTitular() . PHP_EOL;
echo $primeiraConta->mostraSaldo() . PHP_EOL;


var_dump($terceiraConta);

echo Conta::mostraNumeroDeContas();

arquivo conta.php:

<?php
class Conta
{
    private $titular;
    private $cpf;
    private $saldo;
    private static $numeroDeContas = 0;

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

        self::$numeroDeContas++;

    }

    public function __destruct()
    {
        if (self::$numeroDeContas > 2) 
        {
            self::$numeroDeContas--;
        }
    }

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



    public function saca(float $valorASacar)
    {
        if ($this->saldo < $valorASacar)
        {
            echo "Você não pode sacar";
            return;
        }
        $this->saldo -= $valorASacar;
    }
    public function deposita(float $valorADepositar)
    {
        if ($valorADepositar <= 0)
        {
            echo "Valor precisa ser maior";
            return;
        }
            $this->saldo += $valorADepositar;
    }
    public function transfere(float $valorATransferir, Conta $contaDestino)
    {
        if ($valorATransferir > $this->saldo)
        {
            echo "Valor a transferir maior do saldo atual.";
            return;
        }
        $this->saca($valorATransferir);
        $contaDestino->deposita($valorATransferir);
    }
    public function mostraSaldo() : float
    {
        return $this->saldo;
    }

    public function defineTitular(string $titular)
    {
        $this->titular = $titular;
    }

    public function defineCpf($cpf)
    {
        $this->cpfTitular = $cpf;
    }

    public function mostraNomeTitular(): string
    {
        return $this->titular->mostraNome();
    }

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

arquivo Titular.php:

<?php

class Titular
{
    private $nome;

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

    private function validaNomeTitular($titular)
    {
        if (strlen($titular) < 5) {
            echo "Nome precisa ter mais que 4 caracteres";
            exit();
        }
    }

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



}

arquivo Cpf.php:

<?php

class Cpf
{

    private $cpf;

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

    public function mostraCpf() : string
    {
        return $this->cpf;
    }
}
4 respostas

Que erro você recebe, Douglas?

Esse é o erro que o terminal retorna:

douglas@Mac-mini-de-Douglas AluraPHP % php src/banco.php PHP Recoverable fatal error: Object of class Cpf could not be converted to string in /Users/douglas/AluraPHP/src/conta.php on line 12 douglas@Mac-mini-de-Douglas AluraPHP %

Doublas, baseado no que você mostrou, o erro não faz sentido. Você consegue compartilhar o projeto todo no GitHub, por favor, pra eu dar uma olhada?

solução!

Ah, achei. Erro sutil.

No construtor da sua classe conta, aqui está o erro:

$this->$cpf = $cpf;

Só trocar por $this->cpf = $cpf. :-D