0

是否可以以某种方式将其重写为更短?

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

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

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

谢谢

4

6 回答 6

18

您可以使用条件运算符?:

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

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

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

于 2009-12-30T11:31:01.280 回答
8

秋葵的答案可能是最好的方法。

也可以写成:

$pic_action = 0;
if (isset($_POST['pic_action'])){
    $pic_action=$_POST['pic_action'];
}
于 2009-12-30T11:55:21.757 回答
2
$pic_action=(isset($_POST['pic_action']))?($_POST['pic_action']):0;
于 2009-12-30T11:31:15.203 回答
1
$pic_action = array_get($_POST, 'pic_action', 0);

上面的行需要array_get下面定义的函数。来自Kohana 的Arr课程。非常小且通用的功能。可用于所有数组,例如$_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;
}
于 2009-12-30T12:06:00.073 回答
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
}
于 2009-12-30T11:49:54.723 回答
0

你可以做:

$_POST['pic_action'] = isset($_POST['pic_action']) ? $_POST['pic_action'] : 0;
于 2009-12-30T11:59:06.820 回答