Вопрос

Можно ли как -нибудь переписать это, чтобы быть короче?

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

Я видел это где -то, но забыл ...:/

Кстати, пожалуйста, объясните свой код, если хотите!

Спасибо

Это было полезно?

Решение

Вы можете использовать Условный оператор ?::

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

Условное выражение оператора expr1 ? expr2 : expr3 оценивается на возвратную стоимость expr2 Если оцениваемое возвратное значение expr1 является истинный; в противном случае выражение оценивается с оцененной возвратной стоимостью expr3. Анкет Так что если isset($_POST['pic_action']) оценивает истинный, все выражение оценивается на оценку $_POST['pic_action'] и к оцененной стоимости 0 в противном случае.

Так что вкратце: если isset($_POST['pic_action']) правда, $pic_action будет держать ценность $_POST['pic_action'] а также 0 в противном случае.

Другие советы

Ответ Gumbo, наверное, лучший способ.

Это также может быть написано как:

$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);

Приведенная выше линия требует array_get Функция определена ниже. Источник из Кохана 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;
}

Дольше, но многоразовый:

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

Ты можешь сделать:

$_POST['pic_action'] = isset($_POST['pic_action']) ? $_POST['pic_action'] : 0;
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top