Criar alterar um atributo de um objeto usando a classe __set
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
Criar alterar um atributo de um objeto usando a classe __set
Classe Endereco.php
<?php
namespace Alura\Banco\Modelo;
/**
* Class Endereco
* @package Alura\Banco\Modelo
* Adiciona um campo de leitura nesse caso para a IDE ajudar na chamada
* @property-read string $cidade
* @property-read string $bairro
* @property-read string $rua
* @property-read string $numero
*
*/
class Endereco
{
private $cidade;
private $bairro;
private $rua;
private $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)
{
$metodo = 'recupera' . ucfirst($nomeAtributo);
return $this->$metodo();
}
public function __set(string $nomeAtributo, string $valor): void
{
$this->$nomeAtributo = $valor;
}
}
Arquivo de teste endereco.php
<?php
use Alura\Banco\Modelo\Endereco;
require_once 'autoload.php';
$umEndereco = new Endereco(
'Petropolis',
'Bairro Qualquer',
'Minha Rua',
'71B'
);
$outroEndereco = new Endereco(
'Rio',
'Centro',
'Uma rua ai',
'50'
);
echo $umEndereco->cidade . PHP_EOL;
echo $umEndereco . PHP_EOL;
echo $outroEndereco . PHP_EOL;
$umEndereco->bairro = 'Jardim Record';
echo $umEndereco;