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

Foi útil?

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;
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top