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

[Dúvida] Duvida sobre recuperar Nome do titular

Por que foi preciso criar um método na classe Conta para recuperar o nome ?
$primeiraConta = new Conta (new Titular('020.645.795-04', 'Joao Silva'));
echo $primeiraConta->recuperaNomeTitular() . PHP_EOL;
 //Código referente a classe Conta
 public function recuperaNomeTitular(): string
{
    return $this->titular->recuperaNome();
}
e outro método na classe Titular
 //Código referente a classe Titular
public function recuperaNome() : string
     {
          return $this->nome;
     }

Por que não funciona se fizermos apenas o método na classe Titular , sem o recuperaNomeTitular (da classe conta)?

. .

. .

Segue o código com mais detalhes:
class Conta 
{
   private Titular $titular;
   private float $saldo;
   private static $numeroDeContas = 0; // atributo da classe

   public function __construct(Titular $titular) //método construtor é acionado a cada novo objeto
   {
      $this->titular = $titular;
      $this->saldo = 0;
      self :: $numeroDeContas ++;//atributo da clase  nome da clase :: $ / self = Conta
   }

    public function recuperaNomeTitular(): string
{
    return $this->titular->recuperaNome();
}
class Titular
{
    private string $cpf;
    private string $nome;

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

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

(Desconsiderar) Depois de um tempo acho que entendi o erro, está no encapsulamento.

  1. A classe Conta não conhece o que está privado na classe Titular( $nome, $cpf) , apenas o que está publico da classe Titular. (no caso o método)

  2. Portanto, deve ser adicionado um método na Classe Conta que irá acessar o método da classe Titular (e dentro dessa classe terá acesso a o que estiver privado)

    //Código referente a classe Conta
    public function recuperaNomeTitular(): string
    {
    return $this->titular->recuperaNome();
    }
    //Código referente a classe Titular
    public function recuperaNome() : string
     {
          return $this->nome;
     }
  3. Caso na classe titular o $nome fosse declarado como público , possibilitaria acesso direto do método recuperaNomeTitular() (sem a necessidade de um método também na classe TItular) .

    //Código referente a classe Conta
    public function recuperaNomeTitular(): string
    {
      return $this->titular->nome;
    }
solução!

Olá, Anthony. Tudo bem?

A sua linha de raciocionio está correta, no próximo curso de Avançando com Orientação a Objetos com PHP: Herança, Polimorfismo e Interfaces você vai conhecer um outro modificador de acesso além do public e private, é o protected, esse modificador indica que somente a própria classe e as classes que herdam dela podem acessar o atributo ou método.

Sei que pode parecer um pouco confuso agora, mas peço que continue os estudos no curso que indiquei para que você possa assistir toda a base teórica.

Caso tenha outra dúvida, abra um tópico aqui no fórum.

Espero ter ajudado, bons estudos :)

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓