Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Erro ao executar o metodo __get

Bom dia, fiz como no vídeo no entanto estou com o seguinte erro após implementar o método __get:

Documentos/PHP_Alura/PHP_OO$ php enderecos.php PHP Notice: Undefined variable: rua in /home/helio/Documentos/PHP_Alura/PHP_OO/src/Modelo/Endereco.php on line 32 PHP Fatal error: Uncaught Error: Call to undefined method Alura\Banco\Modelo\Endereco::recupera() in /home/helio/Documentos/PHP_Alura/PHP_OO/src/Modelo/Endereco.php:49 Stack trace:

#0 /home/helio/Documentos/PHP_Alura/PHP_OO/src/Modelo/Endereco.php(32): Alura\Banco\Modelo\Endereco->__get()

#1 /home/helio/Documentos/PHP_Alura/PHP_OO/src/Modelo/Endereco.php(49): Alura\Banco\Modelo\Endereco->recuperaRua()

#2 /home/helio/Documentos/PHP_Alura/PHP_OO/enderecos.php(19): Alura\Banco\Modelo\Endereco->__get()

#3 {main} thrown in /home/helio/Documentos/PHP_Alura/PHP_OO/src/Modelo/Endereco.php on line 49

Abaixo minha classe Endereco:

<?php

namespace Alura\Banco\Modelo;

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 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}";
  }

  public function __get(string $nomeAtributo)
  {
      $metodo = 'recupera' . ucfirst($nomeAtributo);
      //echo $metodo; exit();
      return $this->$metodo();
  }



}

abaixo meu arquivo enderecos.php:

<?php

use Alura\Banco\Modelo\Endereco;

require_once 'autoload.php';

$umEndereco = new Endereco(
    'Petrópolis',
    'bairro qualquer',
    'Minha rua',
    '71b'
);
$outroEndereco = new Endereco(
    'Rio',
    'Centro',
    'Uma rua aí',
    '50'
);
echo $umEndereco->rua;

muito obrigado pela atenção

1 resposta
solução!

Olá Hélio.

Nos trechos como este:

return $this->$cidade;

troque para o nome sem $

return $this->cidade;

teste novamente por favor.

Abraço.