1
resposta

Minha solução do metodo __set

Opa,

Minha solução foi um pouco mais "no braço" hehehe e queria saber a opinião do professor :)

Enderecos.php

<?php

use Alura\Banco\Modelo\Endereco;

require_once 'autoload.php';

$umEndereco = new Endereco(
    'Floripa',
    'Coqueiros',
    'rua do saber ',
    89
);

$outroEndereco = new Endereco(
    'Sao Paulo',
    'Lapa',
    'avenida europa',
    1500
);

$umEndereco->__set('$numero', 10);

echo $outroEndereco-> numero . PHP_EOL;
echo $umEndereco->numero;
exit();

echo $outroEndereco;

e agora o Endereco.php:

<?php

namespace Alura\Banco\Modelo;

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

class Endereco
{
    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;
    }

    /**
      * Metodos "recupera" feitos em aula suprimidos no código
      * Somente deixado os metodos GET e SET
          */
    public function __get(string $nomeAtributo)
    {
        $metodo = 'recupera'. ucfirst($nomeAtributo);
        return $this-> $metodo();
    }

    public function __set($nomeAtributo, $valor)

    {
        if ($nomeAtributo === '$bairro') $this->bairro = $valor;
        if ($nomeAtributo === '$cidade') $this->cidade = $valor;
        if ($nomeAtributo === '$rua') $this->rua = $valor;
        if ($nomeAtributo === '$numero') $this->numero = $valor;

    }
}
1 resposta

Oi Giovanni, como vai?

Sentimos muito pela demora em retornar.

Parabéns pelo empenho na resolução dos desafios propostos!

Neste caso, para evitarmos que nosso código tenha um uso excessivo de ifs que poderia ser ainda maior se a classe Endereco tivesse mais atributos, poderiamos resolver o desafio desta forma:

public function __set(string $nomeAtributo, string $valor): void
{
    $this->$nomeAtributo = $valor;
}    

Repare que também poderiamos definir os tipos dos parâmetros recebidos pelo método e o tipo do retorno do método, que no caso seria void.

Espero ter ajudado.

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!