Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Exercício __set

Olá Vinícius,

Neste exercício acabei modificando um pouco o getter e o setter para acessar diretamente a propriedade ao invés de chamar os métodos recuperaPropriedade...

<?php

namespace Alura\Banco\Model;

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

final 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 __get(string $propriedade)
    {
        return $this->$propriedade;
    }

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

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

use Alura\Banco\Model\Endereco;

require_once "vendor/autoload.php";

$endereco = new Endereco("Minha Cidade", "Centro", "Minha Rua", "384");

echo $endereco->cidade . PHP_EOL;

$endereco->cidade = "Cidade Qualquer";

echo $endereco->cidade . PHP_EOL;

Quanto a isso, fiquei com uma dúvida, qual a diferença entre a utilização do __get e __set em uma propriedade encapsulada como private para utilização de uma propriedade public e não implementar setters e getters?

Visto que em ambos os casos as propriedades podem ser modificadas de fora da classe.

Desde já agradeço pela atenção.

2 respostas

Ótima pergunta, Rafael.

Se no futuro eu precisar fazer com que a cidade seja retornada sempre com letra maiúscula, ou eu queira validar que $numero só possa conter caracteres numéricos, vou poder modificar o método recuperaCidade ou alteraNumero e quem usa a classe não vai nem precisar saber que houve essa alteração na minha regra de negócios.

:-D

solução!

Fala, Rafael. Entendeu a explicação? Ficou alguma dúvida?

Senão, pode marcar o tópico como solucionado.

:-D

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