Classe Endereco
<?php
namespace Alura\Banco\Modelo;
/**
* Class Endereco
* @package Alura\Banco\Modelo
* @property-read @property-write $cidade
* @property-read @property-write $bairro
* @property-read @property-write $rua
* @property-read @property-write $numero
**/
class Endereco
{
private string $cidade;
private string $bairro;
private string $rua;
private string $numero;
/**
* Endereco constructor.
* @param string $cidade
* @param string $bairro
* @param string $rua
* @param 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($nomeDoAtributo)
{
return $this->$nomeDoAtributo;
}
public function __set($nomeDoAtributo, $valorDoAtributo)
{
$this->$nomeDoAtributo = $valorDoAtributo;
}
public function __toString()
{
return "{$this->cidade},{$this->bairro}, {$this->rua}, {$this->numero}";
}
}
testeEndereco.php
<?php
require_once 'src/autoload.php';
use Alura\Banco\Modelo\Endereco;
// Criação da instância do objeto tipo Endereco
$endereco = new Endereco('Cidade','bairro','rua','numero');
echo "Teste dos métodos mágicos __set,__get e __toString:" . PHP_EOL;
echo "Mostra o endereço antes das alterações (usando o médodo mágico __toString): {$endereco} " . PHP_EOL;
// Mudança dos atributos usando o método mágico __set
$endereco->cidade = 'Brasilia';
$endereco->bairro = 'Asa Norte';
$endereco->rua = '202/203';
$endereco->numero = '01';
echo "Mostra o endereço depois das alterações (usando o médodo mágico __toString) : {$endereco} " . PHP_EOL;
echo "Teste do método mágico __get :\$endereco->bairro = {$endereco->bairro}" . PHP_EOL;
Não criei getters e setters para destacar o uso dos métodos mágicos.