1
resposta

Desafio método __set()

<?php

namespace Alura\Banco\Modelo;

class Endereco
{
    private $cidade;
    private $bairro;
    private $rua;
    private $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);
        return $this->$metodo();

    }

    public function __set(string $nameAtributo, string $valorAtributo)
    {
        $this->$nameAtributo = $valorAtributo;

    }
}
<?php

use Alura\Banco\Modelo\Endereco;

require_once 'autoload.php';


$umEndereco = new Endereco(
    cidade:'Osasco',
    bairro: 'Centro',
    rua: 'Av. dos Autonomistas',
    numero: '1022'
);

$outroEndereco = new Endereco(
    cidade:'Barueri',
    bairro: 'Alphaville',
    rua: 'Primavera',
    numero: '19'
);


echo $umEndereco->cidade = 'Osasco - SP';
exit();

echo $outroEndereco . PHP_EOL;
echo $umEndereco;
1 resposta

Olá, Kelly! Tudo bem?

Desculpa a demora por um retorno.

O método __set() é invocado quando se tenta atribuir um valor a um atributo inacessível diretamente. Ele recebe dois parâmetros: o nome do atributo e o valor a ser atribuído. No código fornecido, o método __set() está implementado para simplesmente atribuir o valor ao atributo correspondente.

No código, há a criação de dois objetos Endereco: $umEndereco e $outroEndereco. Em seguida, é atribuído o valor 'Osasco - SP' ao atributo cidade do objeto $umEndereco, através da expressão $umEndereco->cidade = 'Osasco - SP'. No entanto, o código possui um exit() logo em seguida, o que encerra a execução e impede a exibição dos resultados seguintes.

Para resolver esse problema, podemos remover a linha exit(); e executar o código novamente. Dessa forma, o valor 'Osasco - SP' será atribuído à propriedade cidade do objeto $umEndereco e o resultado será exibido corretamente.

Aqui está o código corrigido:

<?php

use Alura\Banco\Modelo\Endereco;

require_once 'autoload.php';


$umEndereco = new Endereco(
    cidade:'Osasco',
    bairro: 'Centro',
    rua: 'Av. dos Autonomistas',
    numero: '1022'
);

$outroEndereco = new Endereco(
    cidade:'Barueri',
    bairro: 'Alphaville',
    rua: 'Primavera',
    numero: '19'
);

$umEndereco->cidade = 'Osasco - SP';

echo $outroEndereco . PHP_EOL;
echo $umEndereco;

Espero ter ajudado. Caso tenha ficado alguma dúvida, sinta-se à vontade em comunicar, estou à disposição!

Um forte abraço e bons estudos!

Caso este post tenha te ajudado, por favor, marcar como solucionado ✓

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software