3
respostas

__SET (DÚVIDA)

Boa noite Vinícius. Codifiquei a classe Endereço com os atributos:

$uf, $cidade, $bairro, $rua, $logradouro, $complemento;

Endereço é atributo da classe Titular, que é atributo da classe abstrata Conta. Até aqui tudo certo.

Mas ocorre um erro apontado no meu arquivo de execução teste

//PREENCHENDO ENDREÇOS
foreach ($banco->contas as $i => $contas) {
    $contas->endereco( auto_enderecoUf(), "Capital", auto_enderecoBairro(), auto_enderecoRua(), auto_enderecoLog(), " ");
}

O código foi adaptado da versão anterior: $contas->setEndereco

Após um tempo entendi. O __set só recebe argumento quando usado junto ao sinal de atribuição ( = ).

Qual a melhor solução para __get quando se tem vários argumentos?

3 respostas

Como assim "para __get quando se tem vários argumentos"? Não entendi a dúvida. Não faz sentido... =/

O que você quer, aparentemente, é realmente criar um método específico que defina o endereço. Isso não é feito através do método mágico __set. Este método é chamado automaticamente quando a gente tenta realizar alguma atribuição a uma propriedade inexistente ou inacessível.

Olá VInícius, boa tarde.

a Variável $endereço é composto de: uf, cidade, bairro, rua, logradouro e complemento. Eu tentei usar __set para atribuir esses 5 parâmetros de uma vez só mas não consegui.

Estou na dúvida se é possível usar __set para vários parâmetros.

João, acho que você não entendeu bem o que é o método mágico __set.

Esse método é chamado automaticamente quando você tenta atribuir um valor a alguma propriedade inexistente ou inacessível. Ex.:

<?php

class A
{
    private $algo;
}

$a = new A();
$a->algo = 'Um valor'; // Isso vai dar erro
<?php

class A
{
    private $algo;

    public function __set(string $prop, mixed $valor): void
    {
        if ($prop === 'algo') {
            $this->$prop = $valor; // $this->algo vai receber o valor de $valor
        }
    }
}

$a = new A();
$a->algo = 'Um valor'; // Isso vai funcionar, pois o método __set vai ser chamado

Entendeu? :-)