Eu já vi pessoas (que geralmente escrevem um bom código) alterar diretamente a $_POST
matriz com um código como este:
// Add some value that wasn't actually posted
$_POST['last_activity'] = time();
// Alter an existing post value
$_POST['name'] = trim($_POST['name']);
// Our pretend function
// Pass the entire $_POST array as data to work with in the function
// The function update_record() will read only the values we actually need
update_record($_POST);
// ...That sure was easier than creating a new array
// with only the $_POST values we actually need.
Faz sentido que update_record()
não deva acessar diretamente $ _POST, para que possamos passar outras matrizes de dados para ele, por exemplo, mas certamente isso é preguiçoso, com design ruim ou possivelmente errado? No entanto, ainda estamos passando um array válido para update_record()
, então por que criar um novo?
Este não é o ponto da questão, apenas um exemplo de uso. No entanto, ouvi muitas pessoas dizerem que isso não deve ser feito com $_REQUEST
dados, e é uma prática ruim. Mas por que? Parece bastante inofensivo.
Exemplos:
Definir um valor padrão
$_GET
(ou postar) que realmente não existeAdicionando
$_POST
valores que não foram realmente lançados após o envio de um formulárioLimpar diretamente ou filtrar os
$_GET
valores ou chaves da matriz muito cedo no script (saneamento de fallback ... por que não?)Configurando um
$_POST
valor manualmente antes do envio do formulário para preencher uma entrada com um valor padrão (quando a entrada lê$_POST
seu valor padrão; eu fiz isso)Criando seus próprios
$_SERVER
valores? Claro, ei, por que não?E os outros, como
$_COOKIE
e$_SESSION
? Claro que temos que modificar diretamente, certo? Então por que não os outros?
A modificação direta de superglobais nunca deve ser feita ou é aceitável em alguns casos?