Использование тернарного оператора без инструкции Else PHP
Можете ли вы использовать Тернарный оператор в PHP без закрывающего оператора 'else'? Я пробовал, и он возвращал ошибки. Поиск Google ничего не дает, поэтому я думаю, что ответ, вероятно, нет. Я просто хотел проверить здесь. Например:
if ( isset($testing) {
$new_variable = $testing;
}
Будет установлено только $new_variable, если существует $testing. Теперь я могу сделать
$new_variable = (isset($testing) ? $testing : "");
но возвращает пустую переменную для $new_variable, если $testing не задано. Я не хочу пустую переменную, если она не установлена, я хочу, чтобы $new_variable не создавался.
Я пробовал
$new_variable = (isset($testing) ? $testing);
и он возвратил ошибки. Я также пробовал
$new_variable = (isset($testing) ? $testing : );
и он также возвратил ошибки. Есть ли способ использовать Тернарный оператор без прилагаемой инструкции else, или я застрял, записывая его из рук в руки?
EDIT: Следуя совету Rizier123, я попытался установить 'else' часть уравнения в NULL, но он все еще заканчивает добавление ключа в массив. Ценности там нет, но ключ, который испортил мои планы. Пожалуйста, позвольте мне объяснить далее.
Код собирает кучу переменных $_POST из формы и использует их для параметров в stdClass, который затем используется для вызовов метода API. Некоторые из переменных формы не будут существовать, так как все они применяются к одной и той же переменной для вызова API, но пользователь может выбрать только один. В качестве примера, возможно, вы можете выбрать 3 элемента, какой бы элемент, который вы выбрали, не передается в stdClass, а другой 2 не существует.
Я пробовал это:
$yes_this_test = "IDK";
$setforsure = "for sure";
$list = new stdClass;
$list->DefinitelySet = $setforsure;
$list->MaybeSet = (isset($yes_this_test) ? $yes_this_test : NULL);
$list->MaybeSet = (isset($testing) ? $testing : NULL);
print_r($list);
Но, очевидно, MaybeSet получает значение NULL, потому что (isset ($ testing) приходит после (isset ($ yes_this_test) и возвращает
stdClass Object ( [DefinitelySet] => for sure [MaybeSet] => )
Я не буду знать, к какому приказу приходят переменные $_POST, поэтому я не могу структурировать их таким образом, чтобы убедиться, что список обрабатывается в правильном порядке.
Теперь я знаю, что могу сделать что-то вроде
if ( isset($yes_this_test ) {
$list->MaybeSet = $yes_this_test;
}
elseif ( isset($testing) ) {
$list->MaybeSet = $testing;
}
Но я надеялся, что для такого типа логики есть сокращение, так как я должен написать десятки из них. Существует ли оператор, похожий на Тернарный оператор, используемый для if/elseif-операторов?
Ответы
Ответ 1
Начиная с PHP 5.3 вы можете сделать это:
!isset($testing) ?: $new_variable = $testing;
Как видите, он использует деталь только в том случае, если условие ложно, поэтому вы должны отрицать выражение isset
.
UPDATE
Начиная с PHP 7.0 вы можете сделать это:
$new_variable = $testing ?? null;
Как видите, он возвращает свой первый операнд, если он существует и не равен NULL; в противном случае он возвращает второй операнд.
UPDATE
Начиная с PHP 7.4 вы можете сделать это:
$new_variable ??= $testing;
Он присваивает значение, если оно isset
, а в противном случае назначается NULL
.
Ответ 2
Просто установите его в NULL
следующим образом:
$new_variable = (isset($testing) ? $testing : NULL);
Переменная you возвращает false с проверкой isset()
.
Вы можете прочитать больше о NULL
в руководстве.
И цитата оттуда:
Специальное значение NULL представляет переменную без значения. NULL - единственно возможное значение типа null.
Переменная считается null
если:
- ему была присвоена постоянная NULL.
- для него еще не установлено какое-либо значение.
- это было не установлено().
Ответ 3
Вы также можете сделать это (краткая форма):
isset($testing) ? $new_variable = $testing : NULL;