PHP中是否存在较短的if语句?

时间:2009-12-30 11:29:47

标签: php language-features ternary-operator language-construct

是否有可能以某种方式将其改写为更短?

if (isset($_POST['pic_action'])){
  $pic_action=$_POST['pic_action'];
}
else { 
  $pic_action=0;
}

我已经在某个地方看到了但忘记了......:/

顺便说一下,如果你愿意,也请解释你的代码!

由于

6 个答案:

答案 0 :(得分:18)

您可以使用conditional operator ?:

$pic_action = isset($_POST['pic_action']) ? $_POST['pic_action'] : 0;

如果expr1 ? expr2 : expr3的评估返回值为 true ,则条件运算符表达式expr2将计算expr1的返回值;否则表达式求值为expr3的计算返回值。因此,如果isset($_POST['pic_action'])计算为 true ,则整个表达式的计算结果为$_POST['pic_action']的评估值,否则评估为0的评估值。

简而言之:如果isset($_POST['pic_action'])为真,则$pic_action将保留$_POST['pic_action']0的值。

答案 1 :(得分:8)

Gumbo的回答可能是最好的方式。

它也可以写成:

$pic_action = 0;
if (isset($_POST['pic_action'])){
    $pic_action=$_POST['pic_action'];
}

答案 2 :(得分:2)

$pic_action=(isset($_POST['pic_action']))?($_POST['pic_action']):0;

答案 3 :(得分:1)

$pic_action = array_get($_POST, 'pic_action', 0);

上面的行需要下面定义的array_get函数。来自Kohana's Arr class的来源。非常小而通用的功能。可用于所有阵列,例如$_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;
}

答案 4 :(得分:0)

更长,但可重复使用:

$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];
}

或者您可以让QueryPost函数在您使用时执行一种验证形式。

$pic_action = QueryPost('pic_action', 'int', 0);

function QueryPost($name, $rule, $default='', $valid=false) {
    // this shouldn't be too hard to write
}

答案 5 :(得分:0)

你可以这样做:

$_POST['pic_action'] = isset($_POST['pic_action']) ? $_POST['pic_action'] : 0;