1
resposta

[Projeto] Exercício __set()

Endereco.php

<?php

namespace Alura\Banco\Modelo;

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

    /**
     * Summary of __construct
     * @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 defineCidade(string $cidade): void
    {
        $this->cidade = $cidade;
    }

    public function defineBairro(string $bairro): void
    {
        $this->bairro = $bairro;
    }

    public function defineRua(string $rua): void
    {
        $this->rua = $rua;
    }

    public function defineNumero(string $numero): void
    {
        $this->numero = $numero;
    }

    public function __toString(): string
    {
        return "{$this->rua}, {$this->numero}, {$this->bairro}, {$this->cidade}";
    }

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

    public function __set(string $nomeAtributo, string $valor): void
    {
        $metodo = 'define' . ucfirst($nomeAtributo);
        $this->$metodo($valor);
    }
}

enderecos.php

<?php

use  Alura\Banco\Modelo\Endereco;

require_once 'autoload.php';

$umEndereco = new Endereco('São Paulo', 'Vila Mariana', 'Avenida Paulista', '123');
$outroEndereco = new Endereco('São Paulo', 'Jardim Paulista', 'Rua Deploy de Sexta', '456');

$umEndereco->cidade = 'Extreme Go Horse';
$outroEndereco->bairro = 'Jardim Delete Sem Where';

echo $umEndereco . PHP_EOL;
echo $outroEndereco;

Saída

Avenida Paulista, 123, Vila Mariana, Extreme Go Horse
Rua Deploy de Sexta, 456, Jardim Delete Sem Where, São Paulo
1 resposta

Oi Otavio,

Seu código está excelente! 👍

Você implementou corretamente os métodos mágicos __get e __set para acessar e modificar os atributos da classe Endereco de forma dinâmica.

A saída demonstra que a alteração dos valores de cidade e bairro através da sintaxe de acesso a atributos (ex: $umEndereco->cidade = 'Extreme Go Horse';) funciona como esperado, graças ao método __set.

O uso de ucfirst para padronizar os nomes dos métodos recupera e define é uma ótima prática, tornando o código mais limpo e fácil de manter. 💪

Para saber mais: Documentação oficial do PHP sobre métodos mágicos.

Continue praticando e explorando as possibilidades da orientação a objetos! 💻