1
resposta

Resolvendo __set

Aqui eu fiz assim:

enderecos.php

<?php

use Alura\Banco\Modelo\Endereco;

require_once 'autoload.php';

$umEndereco = new Endereco('Barretoa', 'Jd. Arizona', 'R. Alacyr Bartolomeu Baroni', '66');
$outroEndereco = new ENdereco('Barretos', 'Centro', 'outraRua', '10');

echo $umEndereco . PHP_EOL . "<BR/><BR/>";

echo $umEndereco->numero = 10;

Endereco.php

<?php

namespace Alura\Banco\Modelo;

class Endereco
{
    private $cidade;
    private $bairro;
    private $rua;
    private $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 __toString()
    {
        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, $valor)
    {
        $metodo = 'define' . ucfirst($nomeAtributo);

        $resultado = $this->$metodo($valor);

        if ($resultado == true) :
            return true;
        endif;
        return false;
    }

    public function defineCidade($valor): void
    {
        $this->cidade = $valor;
    }

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

Oi, Marcus, como vai?

Isso mesmo! Boa solução!

Interessante a ideia de adicionar um return para ter a confirmação se a operação foi bem sucedida ou não.

Parabéns pelo empenho nos estudos!

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!