1
resposta

Minha Solução do Método __set

index.php

<?php

require_once 'autoload.php';

use Alura\Models\Endereco;

$endereco = new Endereco('Queimadas', 'Centro', 'Rua Francisco Salles', '02');

$endereco->cidade = 'São Domingos';

echo $endereco->cidade;

Endereco.php

<?php 
namespace Alura\Models;

class Endereco
{
   private string $cidade;
   private string $bairro;
   private string $rua;
   private string $numero;

   public function __construct(string $cidade, string $bairro, string $rua, string $numero)
   {
      $this->cidade = $cidade;
      $this->bairro = $bairro;
      $this->rua = $rua;
      $this->numero = $numero;
   }

   public function recuperaCidade (): string 
   {
      return $this->cidade;
   }

   public function recuperaBairro (): string
   {
      return $this->bairro;
   }

   public function recuperaRua (): string 
   {
      return $this->rua;
   }

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

   public function __get($nomeAtributo)
   {
       $metodo = "recupera".ucfirst($nomeAtributo);
       return $this->$metodo();
   }

   public function __set($nomeDoAtributo, $valor)
   {
       $this->$nomeDoAtributo = $valor;
   }

    public function __toString(): string
   {
       return "{$this->recuperaCidade()} | {$this->recuperaRua()}, {$this->recuperaNumero()} - {$this->recuperaBairro()}";
   }
}
1 resposta

Oi Vagner, como vai?

Parabéns pelo empenho na resolução dos desafios propostos!

Lembre-se que é sempre bom definirmos os tipos dos parâmetros que iremos receber em nossos métodos.

Outro ponto importante é que sempre que possível devemos definir explicitamente o tipo do retorno de nossos métodos.

Segue o código com as modificações citadas:

public function __set(string $nomeAtributo, string $valor): void
{
    $this->$nomeAtributo = $valor;
}   

Caso tenha quaisquer comentários ou dúvidas a respeito de alguma aula ou desafio, pode postar aqui no fórum que vamos te responder!

Abraços e bons estudos!