Существует ли более короткий оператор, если в PHP?
-
22-09-2019 - |
Вопрос
Можно ли как -нибудь переписать это, чтобы быть короче?
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;