1
resposta

[Projeto] __set

<?php
namespace Alura\Banco\Modelo;
/**
 * Class Endereco
 * @package Alura\Banco\Modelo
 * @property $cidade;
 * @property $bairro;
 * @property $rua;
 * @property $numero; *
 *
 */
class Endereco
{
    private string $cidade;
    private string $bairro;
    private string $rua;
    private string $numero;

    /**
     * @param string $cidade
     * @param string $bairro
     * @param string $rua
     * @param 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 __toString(): string
    {
        return "{$this->rua}, {$this->numero}, {$this->bairro}, {$this->cidade}";
    }

    public function __get(string $nomeAtributo)
    {
        // rua -> recuperaRua
        $metodo = 'recupera' . ucfirst($nomeAtributo);
        return $this->$metodo();
    }

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

Uso:

<?php

use Alura\Banco\Modelo\Endereco;

require_once 'autoload.php';

$umEndereco = new Endereco('Cariri', 'centro', 'rua 1', '1');
$outroEndereco = new Endereco('Rio', 'outro', 'rua 10', '1A');

$umEndereco->cidade = 'Palmas';
1 resposta

Oii, Parabéns pela sua resolução do desafio! Ficou bem estruturado e organizado :)

Como sugestão para visualizar os dados dos dois endereços no console você poderia acrescentar dois var_dumps da seguinte maneira (É apenas detalhe).

<?php

use Alura\Banco\Modelo\Endereco;

require_once 'autoload.php';

$umEndereco = new Endereco('Cariri', 'centro', 'rua 1', '1');
$outroEndereco = new Endereco('Rio', 'outro', 'rua 10', '1A');

$umEndereco->cidade = 'Palmas';

var_dump($umEndereco);
var_dump($outroEndereco);

Bons estudos :)