A classe Endereco ficou assim:
<?php
namespace Alura\Banco\Modelo;
/**
* Class Endereco
* @package Alura\Banco\Modelo
* @property-read string $estado
* @property-read string $cidade
* @property-read string $bairo
* @property-read string $rua
* @property-read string $numero
*/
class Endereco
{
private string $estado;
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(): string
{
return "{$this->rua}, {$this->numero}, {$this->bairro}, {$this->cidade} - {$this->estado}";
}
public function defineEstado($novoEstado): string
{
return $this->estado = $novoEstado;
}
public function __get($nomeAtributo)
{
$metodo = "recupera" . ucfirst($nomeAtributo);
return $this->$metodo();
}
public function __set($nomeAtributo, $valor)
{
$metodo = "define" . ucfirst($nomeAtributo);
return $this->$metodo($valor);
}
}
Já o arquivo enderecos.php ficou assim:
<?php
use Alura\Banco\Modelo\Endereco;
require_once "autoload.php";
$endereco1 = new Endereco('Montes Claros', 'Centro', 'Rua ali', '2021');
$endereco2 = new Endereco('Montes Claros', 'São Judas', 'Rua certa', '2022');
$endereco1->estado = "Minas Gerais";
$endereco2->estado = "MG";
echo $endereco1 . PHP_EOL;
echo $endereco2 . PHP_EOL;
Funcionou, porém meu PHPStorm acusa erro nessas definições:
$endereco1->estado = "Minas Gerais";
$endereco2->estado = "MG";