Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

__set()

Minha classe Endereco ficou assim:

<?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;
    }

    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(string $atributo, string $valor){
        $this->$atributo = $valor;
    }

}

E para testar, o enderecos.php ficou assim:

<?php

use Alura\Banco\Modelo\Endereco;

require_once 'autoload.php';



$umEndereco = new Endereco('Colatina', 'centro', 'Rua José da Silva', '50');

echo $umEndereco. PHP_EOL; // testando o __toString()
echo $umEndereco->rua; // testando o __get()

echo PHP_EOL.PHP_EOL;

//Alternado os dados com o método __set()
$umEndereco->__set('rua', 'Rua Santa Luzia');
$umEndereco->__set('numero',299);
$umEndereco->__set('bairro', 'Alvorada');

echo $umEndereco->rua; // verificando com __get()
echo PHP_EOL;

echo $umEndereco; // exibindo todo o objeto novamente

Como resultado, tive:

Rua José da Silva, 50, centro, Colatina 
Rua José da Silva

Rua Santa Luzia
Rua Santa Luzia, 299, Alvorada, Colatina 
1 resposta
solução!

Oi Hugo, tudo bem?

Muito obrigada por compartilhar a solução do desafio! É ótimo ver a aplicação do método mágico __set() na classe Endereco em PHP. Você implementou de maneira clara e eficiente, permitindo a manipulação dos atributos da classe.

A utilização do método __set() para alterar dinamicamente os valores dos atributos é uma prática interessante, especialmente em casos onde se deseja controlar ou validar a atribuição de valores.

Continue praticando e explorando mais conceitos em PHP.

Um abraço e bons estudos.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software