O uso de globais torna seu código difícil de testar, portanto, mais propenso a erros, não seguro e imprevisível. É por isso que passamos as variáveis que queremos dentro de uma função / objeto. Então, minha pergunta é simples:
$ _POST, $ _GET, etc violam o princípio do encapsulamento ?
Estou pensando que, para manter o controle dessas variáveis de uma maneira OO, uma solução ideal seria adicionar algumas linhas como esta ao código:
// Convert the $_GET array to an object
$get = json_decode(json_encode($_GET), FALSE); // stackoverflow.com/a/1869147
// Stop it from being included from anywhere
unset($_GET);
// Small example of what could be done later on
$DB = new PDO(/* ... */);
$Person = new Person($DB, $get->id);
Eu não vi isso em lugar nenhum, nem mesmo um tutorial ou recomendação. Além disso, podemos ver claramente como o código acima é muito mais fácil de ser testado do que aquele que inclui $Person = new Person($DB, $_GET['id']);
ou mesmo (o feio), $Person = new Person($DB);
pois você pode usar um $get
objeto simulado .
O código acima está na direção certa ou estou faltando alguma coisa?
EDIT: Depois de alguma investigação ( framework Zend e Cake PHP ), como Alexander Kuzmin sugeriu, parece ser a coisa certa a seguir. Eles provavelmente são grandes demais para eu digitar o código do caixa eletrônico, mas vou lembrar disso.