3
respostas

Erro métodos privados

Boa tarde. Meu método protegeAtributo não está funcionando.

 public function __set($atributo, $valor){
      $this->protegeAtributo($atributo);
      $this->$atributo = $valor;
    }

  public function protegeAtributo($atributo){
    if($atributo == "titular" || $atributo == "saldo"){
      return false;
    }
  }

Onde que pode estar o erro?

3 respostas

Testei o método protegeAtributo() assim e funcionou

private function protegeAtributo($atributo){
      if($atributo == "titular" || $atributo == "saldo"){
        throw new Exception("O atributo $atributo continua PRIVADO");
      }
    }

Agora outra pergunta. Qual o motivo de funcionar o return false quando está direto no __get e __set e quando está em um método que é chamado em outro método o return false não funciona?

Boa tarde Felipe, tudo bom?

O método __get serve para pegar o valor da variável, por exemplo se eu quiser saber o valor da variável agencia eu preciso usar o método __get que irá retornar esse valor.

Já o método __set serve para adicionar um valor em uma variável, por exemplo se eu quiser adicionar o valor 2345 na variável agencia eu preciso usar o __set e como você vai adicionar um valor na variável o método não precisa retornar nada para você.

Eu entendi isso Lucas. Só que quando eu faço o código no __get e __set assim funciona:

private function __set($atributo, $valor){
      if($atributo == "titular" || $atributo == "saldo"){
          return false;
      }
      $this->$atributo = $valor;
    }

Agora quando eu faço o código assim, não funciona:

private function protegeAtributo($atributo){
      if($atributo == "titular" || $atributo == "saldo"){
          return false;
      }
 }

public function __set($atributo, $valor){
      $this->protegeAtributo($atributo);
      $this->$atributo = $valor;
 }

Só queria saber o motivo do if com false funcionar sem ser um método e quando chamo o método com o mesmo if não funciona.