Существует ли более короткое выражение if в PHP?
Можно ли как-то переписать это, чтобы оно было короче?
if (isset($_POST['pic_action'])){
$pic_action=$_POST['pic_action'];
}
else {
$pic_action=0;
}
Я видел это где-то, но забыл...:/
Кстати, пожалуйста, объясните свой код также, если хотите!
Спасибо
6 ответов
Вы можете использовать условный оператор?:
:
$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
иначе.
Гамбо ответ, наверное, лучший путь.
Это также может быть записано как:
$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;
}
Ты можешь сделать:
$_POST['pic_action'] = isset($_POST['pic_action']) ? $_POST['pic_action'] : 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
}