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

Implementação método mágico __set

Minha implementação método mágico __set.

Classe Endereço:

<?php

namespace Alura\Banco\Modelo;

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

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

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

Aquivo teste:

<?php

use Alura\Banco\Modelo\Endereco;

require_once 'autoload.php';

$umEndereco = new Endereco('Rio de Janeiro', 'Ipanema', 'Rua ABC ', '1000');

echo $umEndereco . PHP_EOL;

$umEndereco->cidade = 'nomeCidade';
$umEndereco->bairro = 'nomeBairro';
$umEndereco->rua = 'nomeRua';
$umEndereco->numero = 'numero123';

echo $umEndereco . PHP_EOL;

Embora o PHPStorm tenha reclamado do @property-read no arquivo de definição da Classe Endereco, a execução funcionou.

Imagino que o mais correto seria substituir por @property-write?

1 resposta
solução!

Boa rafael.

Só trocar de @property-read pra @property, já que agora é tanto de leitura quanto escrita.

;-)

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