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

Allowed Memory Exhausted

Bom dia! Estou recebendo o seguinte erro ao executar o método __get:

Allowed memory size of 134217728 bytes exhausted.

O erro está dando na linha do __get.

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()
    {
        return $this->cidade;
    }

    public function recuperaBairro()
    {
        return $this->bairro;
    }

    public function recuperaRua()
    {
        return $this->rua;
    }

    public function recuperaNumero(){
        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); //uppercase first
        return $this->$metodo;

    }

    public function __set($nomeAtributo, $value): void {
        $metodo = 'altera' . ucfirst($nomeAtributo);
        $this->$metodo($value);
        //usamos o __set para acessar uma propriedade privada sem precisar chamar declaradamente o setter correspondente. Neste caso o __set traduz um $umEndereco->cidade para $umEndereco->alteraCidade
    }
} 
1 resposta
solução!

return $this->$metodo; tenta acessar uma propriedade com o nome que estiver na variável $metodo. Essa propriedade não existe, então o método __get vai ser chamado e vai tentar acessar $this->$metodo. Você entrou em uma recursão infinita. O método __get se chama até estourar a memórial

Ao invés de return $this->$metodo; era pra ser return $this->$metodo();.