robsonvleite / datalayer

The data layer is a persistent abstraction component of your database that PDO (O data layer é um componente para abstração de persistência no seu banco de dados que usa PDO com prepared statements)
https://www.upinside.com.br
MIT License
144 stars 53 forks source link

Comportamento estranho ou esperado? #44

Closed helisoncruz closed 2 years ago

helisoncruz commented 3 years ago

Usando o componente percebi que quando chamo dentro de uma camada de modelo um atributo/valor retornado pelo banco, por exemplo $this->status e eu tiver na mesma class um método como o seguinte public function status(){...} é executado o método no lugar do valor, isso é esperado ou é um conflito? Se esperado, qual o motivo?

Isso me impossibilitou de fazer uma verificação simples, como o exemplo abaixo:

public function status(): ?Status
{
    if ($this->status) {
        return (new Status())->findById($this->status);
    }
    return null;
 }
toniette commented 2 years ago

Já passei por isso também. É esperado mas não considero correto. Isso ocorre devido a um método mágico que na minha visão poderia mudar. Vou propor uma alteração mais detalhada.

toniette commented 2 years ago

src/DataLayer.php

image

O "problema" ocorre aqui. Não vejo muito sentido nesse __get()...

robsonvleite commented 2 years ago

O comportamento é esperado e o correto dentro de uma estrutura DataLayer pois é o que permite o controle de dados, com isso você consegue controlar o acesso a dados sensíveis, ou mesmo tratar retornos de forma dinâmica.

Imagine que você tenha um campo document com CPF, e queira voltar um 999..-87, ao criar o método document você pode tratar isso ao mesmo tempo evita o acesso ao dado abertamente.