Bem no meu ficou assim
<?php
namespace alura\banco\model;
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 getcidade() :string
{
return $this->cidade;
}
public function getbairro() :string
{
return $this->bairro;
}
public function getrua() :string
{
return $this->rua;
}
public function getnumero() :string
{
return $this->numero;
}
public function __toString()
{
return "{$this->rua}, {$this->numero}, {$this->bairro}, {$this->cidade}";
}
public function __get($name)
{
$metodo = 'get'.$name;
return $this->$metodo();
}
public function __set($name, $value)
{
$name = strtolower($name);
return $this->$name = $value;
}
}
Como podem ver não uso 'recupera' e sim 'get' e meus métodos estão todos em minúsculas, para o método SET apenas coloquei todos os caracteres de entrada para minúsculas e depois reatribui o valor da variavél chamada no return. O programa teste está assim:
<?php
require_once 'src\autoload.php';
use alura\banco\model\Endereco;
$umendereco = new Endereco('UmaCidade', 'UmBairro', 'UmaRuaQualquer', 'UmNumero');
echo $umendereco -> rua.PHP_EOL;
$umendereco -> rua = 'OutraRuaQualquer';
echo $umendereco -> rua;
Espero que fucione pra vocês.