Существует ли сокращение PHP для: if (a) {var = a}

#php

#php

Вопрос:

В PHP есть более короткий или лучший способ написания :

If ($a) {$var = $a}

Моя главная цель — :

  • создавайте экземпляр переменной ($var) только в том случае, если $a существует. (в реальном мире $a — это функция, возвращающая значение, если оно найдено при поиске по строке).
  • не повторяйте упоминание $a .

Комментарии:

1. Переменные должны существовать безоговорочно, просто со значениями по умолчанию. Если вы примете это близко к сердцу, то подойдет что-то вроде $var = $a ?: $var .

2. Вы имеете в виду что-то вроде ?? оператора объединения null?

3. Вы ищете что-то вроде $var ??= $a;

4. вернемся к рассматриваемой проблеме…. Я ценю ответы до сих пор, так что спасибо. Однако для меня важно, чтобы переменная объявлялась только в том случае, если $a существует. Допустим, $var — это массив, и мне нужно только назначить ему ключ ($ var[«a»]), если $a существует. Если бы я повторил описанные методы, я мог бы получить массив с большим количеством определенных ключей, но с нулевыми значениями. В идеальном мире мне нужно содержать этот массив в чистоте и определять только необходимые ключи.

5. В вашем вопросе не упоминаются массивы, поэтому неудивительно, что никто не предлагает решения для них.

Ответ №1:

Такого сокращения не существует. Однако вы можете выполнить то же самое следующим образом:

 $var = $a;
if (!$var) {
    unset($var);
}
  

Если $var является ложным (0, «0», «», null, empty или false) он будет сброшен, как если бы он не был создан в первую очередь.

Редактировать:

unset также работает с индексами массива, такими как следующие:

 unset($var['a']);
  

Приведенное выше не просто установило бы значение в null. Он установил бы его равным null и удалил бы его из массива.

Вероятно, вам нужно что-то вроде этого:

 $temp = $a;
if ($temp) {
    $array['a'] = $temp;
}
else {
    unset($temp);
}
  

Вы также можете выполнить то, что хотите, с помощью функции:

 function add_value_if_exists(amp;$array, $key, $value) {
    if ($value) {
        $array[$key] = $value;
    }
}

add_value_if_exists($array, 'a', $a);
  

В приведенном выше $array будет изменен только в том случае, если $a является правдивым.

Комментарии:

1. Спасибо всем за ваш вклад. Я колебался вокруг идеи просто написать метод или функцию для этой цели, и кажется, что это будет лучшим решением. большое спасибо.

Ответ №2:

Есть два оператора, которые делают что-то похожее на то, что вы ищете:

  • Оператор «сокращенный троичный» или «Элвис», ?:
  • Оператор «null объединяется», ??

Оба являются своего рода «встроенным if»: $var = $a ?: $b означает что-то вроде «установите $ var в $ a, если оно правдиво, $ b в противном случае»; $var = $a ?? $b аналогично, но проверяет «существует, а не null», а не «правдиво».

Существует также комбинированный оператор присваивания ??= , который оставляет переменную нетронутой, если левая сторона не сброшена или не имеет значения null, поэтому действует как способ предоставления значений по умолчанию. Это своего рода противоположность тому, что вы хотели, но во многих сценариях вы можете написать такой код:

 $blah = somefunc();
$blah ??= $default;
  

PHP не имеет возможности явно объявлять переменные (например, нет var ключевого слова или объявления типа like int $counter; ), поэтому не может быть синтаксиса для точного требования, которое вы написали. В языках, которые имеют явные объявления переменных, не имеет смысла, чтобы они были условными, поскольку они обычно предназначены для статической проверки (т. Е. «Во время компиляции»).

Комментарии:

1. Как указано в исходном вопросе и теперь дополнено, чтобы отразить этот пример; Я не хочу объявлять «бла», если «somefunc()» не возвращает true.