Установите несколько переменных одинаковыми, если они не установлены

Есть ли сокращение для следующего:

$a ??= []; # Note: $a ??= [] is equivalent to $a = isset($a) ? $a : []
$b ??= [];
#...
$z ??= [];

Одним из возможных решений является:

foreach (array("a", "b", ..., "z") as $elem) {
  $$elem ??= [];
}

Что мне не нравится в описанном выше подходе, так это то, что я передаю в функцию foreach список строк, а не список переменных — это было бы неудобно, если бы имена переменных изменились. Есть ли другое более удобное решение?

Известны ли эти переменные ранее? Или вы ищете какое-то общее решение, позволяющее избежать неопределенных переменных?

hassan 28.02.2024 08:31

В текущей реализации имена переменных известны. Скорее всего, так и останется.

plsssineedheeeelp 28.02.2024 08:44

Когда вам приходится иметь дело с громоздким объемом отдельных переменных, возникает вопрос: «Почему бы не использовать массив для хранения всех переменных, чтобы вы могли пользоваться функциями массива и разумными методами итерации?»

mickmackusa 29.02.2024 02:16

Интересно, почему у вас возникла эта проблема XY. Можете ли вы объяснить, почему вы столкнулись с этой ненормальной проблемой индивидуальных переменных?

mickmackusa 29.02.2024 02:24
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
5
85
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

в php вы можете добиться этого, используя переменные переменные. вот более краткое и динамичное решение:

foreach (range('a', 'z') as $letter) {
    ${$letter} ??= [];
}

этот код динамически создает переменные от $a до $z и инициализирует их пустым массивом, если они еще не установлены. таким образом вам не нужно явно передавать список имен переменных. Вместо этого он динамически генерирует их на основе диапазона букв от «a» до «z».

У этого решения та же проблема, что и у предыдущего — было бы неудобно, если бы имена переменных изменились. В моем случае имена переменных a, ..., z на данный момент являются заполнителями.

plsssineedheeeelp 28.02.2024 08:15
Ответ принят как подходящий

Вы можете использовать списки аргументов переменной длины по ссылке: (PHP >= 7.4)

function defineVariables($default, &...$vars)
{
    foreach($vars as &$v)
        $v ??= $default;
}

defineVariables([], $a, $b, $c);

Я не могу заставить это работать. PHP-песочница

plsssineedheeeelp 28.02.2024 08:28

Это хорошо работает для меня. PHP Sandbox Кажется, большинство онлайн-анализаторов синтаксиса PHP не совсем это понимают.

shingo 28.02.2024 08:32

У меня работает: 3v4l.org Игнорируйте отчет об ошибке в строке 6. Это тоже имеет смысл, если вы читаете код.

KIKO Software 28.02.2024 08:32

Хорошо. Это хорошее решение. Эту функцию также можно применить напрямую. PHP-песочница

plsssineedheeeelp 28.02.2024 08:46

Другие вопросы по теме