Essa é a minha classe Endereco:
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 __toString() : string
{
return "{$this->cidade} - {$this->rua}, {$this->numero}, {$this->bairro}";
}
No arquivo de testes criei o seguinte endereço:
$endereco1 = new Endereco('pompéu', "bairro", 'rua das flores', '23');
echo $endereco1;
Assim ele funciona perfeitamente. Mas se eu altero o nome do bairro ele da o seguinte erro:
Fatal error: Uncaught Error: Typed property Alura\Banco\Modelo\Endereco::$bairro must not be accessed before initialization in C:\Users\Raphael\Documents\PHP Projects\orientacao-a-objetos-php\src\Modelo\Endereco.php:22 Stack trace:
#0 C:\Users\Raphael\Documents\PHP Projects\orientacao-a-objetos-php\enderecos.php(12): Alura\Banco\Modelo\Endereco->__toString()
#1 {main} thrown in C:\Users\Raphael\Documents\PHP Projects\orientacao-a-objetos-php\src\Modelo\Endereco.php on line 22
A linha 22 da classe Endereco é justamente o return do __toString
E se eu removo o {$this->bairro} ele funciona.
Alguém sabe o que está havendo?