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

Posso tirar todos os 'recupera' e usar somente o __get?

Mexendo no código desta aula eu resolvi testar usar o método mágico __get deixando somente ele pra 'recuperar' os valores e cortando do código varias linhas de 'recuperaAlgumaCoisa' e ficou assim:

Classe Endereco.php:

<?php

namespace Alura\B\Modelo;

/**
 * Class Endereco
 * @package Alura\B\Modelo
 * @property-read string $cidade
 * @property-read string $bairro
 * @property-read string $numero
 * @property-read string $rua
 */
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 __toString(): string
    {
        return "{$this->rua}, {$this->numero}, {$this->bairro}, {$this->cidade}";
    }

    public function __get(string $nomeAtributo)
    {
        return $this->$nomeAtributo ;
    }

}

E no arquivo de testes endereco.php eu apenas chamei assim:

<?php

use Alura\B\Modelo\Endereco;
require_once 'autoload.php';

$umEndereco = new Endereco('Petrópolis', 'bairro Qualquer', 'Minha rua', '71B');
$outroEndereco = new Endereco('Rio', 'Centro', 'Uma rua aí', '50');

echo $umEndereco->rua.PHP_EOL;
echo $umEndereco->numero.PHP_EOL;
echo $umEndereco->bairro.PHP_EOL;
echo $umEndereco->cidade.PHP_EOL;
echo $umEndereco;

E funcionou, rodou. Mas quero saber se isso é algo que é recomendado ou não recomendado pelas boas práticas, se pode ou se a comunidade acharia ruim fazer apenas assim o uso do __get mágico e pronto, sem criar outros métodos gets (recuperaAlgumaCoisa) a fora...Qual sua opinião, professor?

2 respostas
solução!

Amanda, o problema seria se você não quisesse permitir acesso a algum atributo, ou quisesse implementar alguma modificação em algum método acessor, entende?

Caso isso não seja necessário, não tem problema não. :-)

Ah, sim! Acho que entendi melhor, professor. Obrigada! :D