Existe uma maneira melhor para verificar as variáveis ??postou em PHP?
-
06-07-2019 - |
Pergunta
I encontrar em minhas páginas PHP eu acabar com linhas e linhas de código que olhar como esta:
$my_id = isset($_REQUEST['my_id']) ? $_REQUEST['my_id'] : '';
$another_var = isset($_REQUEST['another_var']) ? $_REQUEST['another_var'] : 42;
...
Existe uma melhor, mais conciso, ou forma mais legível para verificar essa matriz e atribuí-los a uma variável local, se eles existem ou aplicar um padrão, se eles não?
EDIT: Eu não quero usar register_globals()
- Eu ainda tenho o problema isset qualquer maneira
Solução
Como cerca de envolvê-lo em uma função?
<?php
function getPost($name, $default = null) {
return isset($_POST[$name]) ? $_POST[$name] : $default;
}
Outras dicas
um método melhor poderia ser a de criar um singleton / classe estática para abstrair os detalhes de verificar os dados de solicitação.
Algo como:
class Request {
private $defaults = array();
private static $_instance = false;
function getInstance () {
if (!self::$_instance) {
$c = __CLASS__;
self::$_instance = new $c;
}
return self::$_instance;
}
function setDefaults($defaults) {
$this->defaults = $defaults;
}
public function __get($field) {
if (isset($_REQUEST[$field]) && !empty($_REQUEST[$field])) {
return $_REQUEST['field'];
} elseif (isset($this->defaults[$field])) {
return $this->defaults[$field];
} else {
return ''; # define a default value here.
}
}
}
então você pode fazer:
# get an instance of the request
$request = Request::getInstance();
# pass in defaults.
$request->setDefaults(array('name'=>'Please Specify'));
# access properties
echo $request->name;
echo $request->email;
Eu acho que isso faz com que seus scripts cargas indivíduo mais limpo e abstrai a validação etc. além de cargas de âmbito com este projeto para estendê-lo / adicionar comportamentos alternativos, adicione padrão mais complicado lidar com etc etc.
Em primeiro lugar, o uso $_POST
para variáveis ??enviado. $_REQUEST
é um mashup de muitas variáveis ??de entrada diferentes, não apenas $_POST
e poderia causar problemas.
Uma solução para sua pergunta seria a criação de uma função que lida com a lógica isset()
.
function ForceIncomingValue($Key, $Default) {
if (!isset($_POST[$Key]))
return $Default;
else return $_POST[$Key];
}
Antes de mais nada, NUNCA usar a variável $ _REQUEST, ele vai levar a bugs e outros problemas durante o desenvolvimento
function getPOST($key) {
if(isset($_POST[$key])) {
return $_POST[$key];
}
}
note that this code leaves the variable empty when $_POST[$key]
não foi definido
Você também pode adaptar esse código para que você possa em vez disso fornecer-lhe um padrão (sensível), quando o valor não pôde ser carregado.
function getPOST($key, $default = NULL) { if(isset($_POST[$key])) { return $_POST[$key]; } else { return $default; } }
É o conjunto de variáveis ??que você está esperando conhecidos no momento da escrita do roteiro, ou você quer fazer isso para um conjunto arbitrário de valores? Se a primeira é verdadeira, você poderia fazer algo parecido com isto:
# This array would hold the names of all the variables you're expecting
# and a default value for that variable name
$variableNames = array (...);
foreach ($variableNames as $key => $default) {
if (isset ($_REQUEST[$key])) $$key = $_REQUEST[$key];
else $$key = $default;
}
Basicamente, isso leva vantagem da capacidade do PHP para avaliar variáveis ??para criar outras variáveis ??(daí o double-dollar for $$ chave - isto significa criar uma nova variável cujo nome é o valor de $ key).
Eu ainda não chegar a uma boa solução para a última situação.
operador coalescentes do PHP !
$username = $_GET['user'] ?? 'nobody';
Para uma série de variáveis, com um cheque exigência, qualquer um é livre para usar a minha função expect
.