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

Dando erro ao solicitar recupera CPF

*Classe Titular *

<?php

class titular
{

    private $cpf;
    private string $nome;

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

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

    }

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


       private function validatitular($titular){

        if (strlen($titular) < 5){

        echo "Nome precisa ter pelo menos 5 caracteres";
         exit;
        }
     }


}

Classe CPF

<?php


class CPF
{
    private $numero;

    public function __construct(string $numero)
    {
        $numero = filter_var($numero, FILTER_VALIDATE_REGEXP, [
            'options' => [
                'regexp' => '/^[0-9]{3}\.[0-9]{3}\.[0-9]{3}\-[0-9]{2}$/'
            ]
        ]);
        if ($numero === false) {
            echo "Cpf inválido";
            exit();
        }
        $this->numero = $numero;
    }

    public function recuperaNumero()
    {
        return $this->numero;
    }
}

Classe Conta

<?php

class Conta{

      private $titular;
      private $saldo;
      private static $numeroDeContas = 0; // foi criado um atributo para a class.

      public function __construct(titular $titular){

          $this->titular=$titular;
          $this->saldo = 0;

          self::$numeroDeContas++; 

      }

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

      public function sacar(float $valorSacar)
      {
          if( $valorSacar >$this->saldo){
              echo "saque indisponivel";
              return;
          }

        $this->saldo -= $valorSacar;

      }

      public function depositar ( float $ValorDeposito): void
      {
          if($ValorDeposito <= 0){
              echo "Valores incompatives";
              return;
          } 
              $this->saldo += $ValorDeposito;

       }

      public function transferir ( float $valorTransferir, $contaDestino): void
      {
         if ($valorTransferir > $this->saldo){
          echo "SEM LIMITES";
          return;
          }

          echo PHP_EOL;

          $this->sacar($valorTransferir);
          $contaDestino->depositar($valorTransferir);

       }




     public function recuperaSaldo()
      {
        return $this->saldo;
      }

      public function recuperaNomeTitular() 
      {
        return $this->titular->recuperaNome();
      }

      public function recuperacpfTitular() 
      {
        return $this->cpf->recuperaNumero();
      }


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

}

ERRO!

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

2 respostas
solução!

Olá, Paulo! Tudo bem?

Olha, pelo print, as mensagens de erro no terminal indicam que foi no arquivo "\src\Conta.php" na linha 76.

Analisando o seu código enviado, na classe "Conta", dentro do método "recuperacpfTitular", tem o seguinte código na linha 76:

return $this->cpf->recuperaNumero();

Mas, se revisar a aula "Criando a classe Titular" poderá perceber que o projeto foi remodelado, a fim de refinar a abstração do projeto e manter mais coerência no comportamento de cada classe.

E tente perceber que, no seu código, a classe "Conta" não tem como enxergar esta referência $this->cpf->recuperaNumero().

O motivo é que a classe "Conta" possui instância de apenas uma outra classe, a 'Titular' no construtor. Segundo o professor, isso é chamado de composição de objetos.

(Na aula "Criando o nosso primeiro método" você poderá revisar também o conceito de $this "$this tem a referência para o objeto que chamou o método atual" .)

Muito obrigado, faltou um pouco de atenção de minha parte.