desculpa, ainda sou novo nesse assunto (PHP), mas quanto ao exercício o meu ficou assim: Endereco.php (arquivo da classe):
<?php
namespace Alura\Banco\Modelo;
class Endereco
{
private $cidade;
private $bairro = array();
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 . PHP_EOL;
}
public function recuperaRua(): string
{
return $this->rua;
}
public function recuperaNumero(): string
{
return $this->numero;
}
public function defineBairro($bairro): void
{
$this->bairro = $bairro;
}
public function __toString(): string
{
return "{$this->rua} . {$this->numero} . {$this->bairro} . {$this->cidade}";
}
public function __get(string $nomeAtributo)
{
return $this->cidade;
}
public function __set($nomeBairro, $bairro):string
{
return $this->defineBairro('azul');
}
}
enderecos.php (arquivo de execuções):
<?php
use Alura\Banco\Modelo\Endereco;
require_once 'autoload.php';
$umEndereco = new Endereco('Petropolis', 'bairro qualquer', 'Minha rua', '37B');
$outroEndereco = new Endereco('Rio', 'centro', 'Uma rua aí', '50');
echo $umEndereco->recuperaBairro();
$umEndereco->defineBairro('azul');
echo $umEndereco->recuperaBairro();
exit();
echo $umEndereco . PHP_EOL;
echo $outroEndereco;
tá de boa??? pelo que entendí o método __set define valores de atributos á partir de métodos públicos ( nem tentei fazer com métodos privados ou protegidos).....