1
resposta

Minha solução no método __set

Endereco.php

<?php
namespace Alura\Modelo;

class Endereco {

    private $cidade;
    private $bairro;
    private $rua;
    private $numero;

   public function __set(string $nomeAtributo, string $valorAtributo) {

       $this->$nomeAtributo = $valorAtributo;

   }

    public function __get(string $nomeAtributo) {

        return $this->$nomeAtributo;

    }

    //Este metodo mágico, habilita o objeto a ser retornado como string    
    public function __toString(): string
    {
        return "{$this->rua}, {$this->numero}, {$this->bairro}, {$this->cidade}";
    }

}

enderecos.php

<?php

require_once './autoload.php';

use Alura\Modelo\Endereco;

$Ender = new Endereco();
$Ender->cidade = "Rio de Janeiro";
$Ender->bairro = "Iraja";
$Ender->rua = "Rua A";
$Ender->numero = 88;

echo $Ender->bairro;
1 resposta

Não seria necessário chamar o método "ucfirst" para concatenar o segundo parâmetro? veja abaixo:

 public function set($nomeAtributo, $value): void{
        $metodo = 'set' . ucfirst($nomeAtributo);
        $this->$metodo($value);

    }