Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Método __toString - algo na minha classe Endereco só aceita o nome do bairro ser "bairro".

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?

4 respostas

Oi Raphael, beleza?

Assim ele funciona perfeitamente. Mas se eu altero o nome do bairro ele da o seguinte erro:

Você está tentando alterar o nome do bairo de qual forma? Lembre que é uma propriedade privada, só pode alterá-la através de um método setter.

Opa Diego, beleza e ai?

Eu digo alterar o nome do bairro na hora de criar o Endereco. Se eu passo por exemplo:

$endereco1 = new Endereco('pompéu', "centro", 'rua das flores', '23');

Acontece o erro que eu disse. Valeu.

solução!

Oi Rapahel, beleza?

Então, acabei de ver seu erro : $this->$bairro = $bairro;, você colocou um $ a mais.

Deixe igualmente aos outros atributos: $this->bairro = $bairro;

Se isso resolver não esqueça de marcar a resolução para o tópico ser encerrado. Bons estudos.

Nossa que erro bobo. Resolveu sim.

Muito obrigado!