0
respostas

Desafio magic method __set

A classe Endereco ficou assim:

<?php

namespace Alura\Banco\Modelo;

/**
 * Class Endereco
 * @package Alura\Banco\Modelo
 * @property-read string $estado
 * @property-read string $cidade
 * @property-read string $bairo
 * @property-read string $rua
 * @property-read string $numero
 */

class Endereco
{
    private string $estado;
    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 __toString(): string
    {
        return "{$this->rua}, {$this->numero}, {$this->bairro}, {$this->cidade} - {$this->estado}";
    }

    public function defineEstado($novoEstado): string
    {
        return $this->estado = $novoEstado;
    }

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

    public function __set($nomeAtributo, $valor)
    {
        $metodo = "define" . ucfirst($nomeAtributo);
        return $this->$metodo($valor);
    }

}

Já o arquivo enderecos.php ficou assim:

<?php

use Alura\Banco\Modelo\Endereco;

require_once "autoload.php";

$endereco1 = new Endereco('Montes Claros', 'Centro', 'Rua ali', '2021');
$endereco2 = new Endereco('Montes Claros', 'São Judas', 'Rua certa', '2022');

$endereco1->estado = "Minas Gerais";
$endereco2->estado = "MG";


echo $endereco1 . PHP_EOL;
echo $endereco2 . PHP_EOL;

Funcionou, porém meu PHPStorm acusa erro nessas definições:

$endereco1->estado = "Minas Gerais";
$endereco2->estado = "MG";

Insira aqui a descrição dessa imagem para ajudar na acessibilidade