Existe uma instrução IF mais curta no PHP?
-
22-09-2019 - |
Pergunta
É possível reescrever isso para ser mais curto de alguma forma?
if (isset($_POST['pic_action'])){
$pic_action=$_POST['pic_action'];
}
else {
$pic_action=0;
}
Eu já vi em algum lugar, mas esqueci ...:/
BTW, explique seu código também, se quiser!
Obrigado
Solução
Você poderia usar o operador condicional ?:
:
$pic_action = isset($_POST['pic_action']) ? $_POST['pic_action'] : 0;
A expressão do operador condicional expr1 ? expr2 : expr3
avalia o valor de retorno de expr2
Se o valor de retorno avaliado de expr1
é verdadeiro; caso contrário, a expressão avalia o valor de retorno avaliado de expr3
. Então se isset($_POST['pic_action'])
avalia para verdadeiro, toda a expressão avalia o valor avaliado de $_POST['pic_action']
e para o valor avaliado de 0
por outro lado.
Então, em suma: se isset($_POST['pic_action'])
é verdade, $pic_action
manterá o valor de $_POST['pic_action']
e 0
por outro lado.
Outras dicas
A resposta de Gumbo é provavelmente a melhor maneira.
Também pode ser escrito como:
$pic_action = 0;
if (isset($_POST['pic_action'])){
$pic_action=$_POST['pic_action'];
}
$pic_action=(isset($_POST['pic_action']))?($_POST['pic_action']):0;
$pic_action = array_get($_POST, 'pic_action', 0);
A linha acima requer o array_get
função definida abaixo. Retirado de Kohana's Arr
classe. Função muito pequena e genérica. Pode ser usado em todas as matrizes, por exemplo $_GET
.
/**
* Retrieve a single key from an array. If the key does not exist in the
* array, the default value will be returned instead.
*
* @param array array to extract from
* @param string key name
* @param mixed default value
* @return mixed
*/
function array_get(array $array, $key, $default = NULL)
{
return isset($array[$key]) ? $array[$key] : $default;
}
Mais, mas reutilizável:
$pic_action = QueryPost('pic_action', 0);
function QueryPost($name, $default='', $valid=false) {
if (!isset($_POST[$name])) return $default;
if (($valid) and (empty($_POST[$name]))) return $default;
return $_POST[$name];
}
Ou você pode fazer com que a função do Querypost faça uma forma de validação enquanto estiver nisso.
$pic_action = QueryPost('pic_action', 'int', 0);
function QueryPost($name, $rule, $default='', $valid=false) {
// this shouldn't be too hard to write
}
Você pode fazer:
$_POST['pic_action'] = isset($_POST['pic_action']) ? $_POST['pic_action'] : 0;