Использование тернарного оператора без инструкции 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;