Распаковка массива аргументов в php

Python предоставляет оператор «*» для распаковки списка кортежей и передачи их функции в качестве аргументов, например:

args = [3, 6]
range(*args)            # call with arguments unpacked from a list

Это эквивалентно:

range(3, 6)

Кто-нибудь знает, есть ли способ добиться этого в PHP? Поиск в Google вариантов "PHP Unpack" ничего не дал ... может быть, в PHP это называется по-другому?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать 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 и хотите разрабатывать...
30
0
16 250
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Ответ принят как подходящий

Для этого вы можете использовать call_user_func_array():

call_user_func_array("range", $args);, чтобы использовать ваш пример.

Это похоже на старый ответ - теперь, вероятно, более уместно использовать оператор распаковки аргументов, см. Ответ @Salvador Dali

jgivoni 14.11.2019 18:42

Согласитесь с @jgivoni. Общая тенденция в PHP, впервые появившаяся в версии 7, а теперь и в PHP 8, заключается в отказе от неконтролируемых функций, таких как call_user_func_array(), func_get_args() и т. д., В пользу оператора с переменными числами "...". Теперь ... Я был бы очень признателен, если бы кто-нибудь мог сказать мне, как это сделать в python: $ m = 'getName'; $ name = $ obj -> $ m ();

dougB 02.12.2020 10:58

Вы должны использовать call_user_func_array

call_user_func_array(array(CLASS, METHOD), array(arg1, arg2, ....))

http://www.php.net/call_user_func_array

или используйте API отражения http://www.php.net/oop5.reflection

В php5.6 добавлен Распаковка аргумента через ... (оператор splat). Используя его, вы можете избавиться от call_user_func_array() для этой более простой альтернативы. Например, имея функцию:

function add($a, $b){
  return $a + $b;
}

С вашим массивом $list = [4, 6]; (после php5.5 вы можете объявлять массивы таким образом).

Вы можете вызвать свою функцию с помощью ...:

echo add(...$list);

В определенных сценариях вы можете рассмотреть возможность использования unpacking, что возможно в php, аналогично python:

list($min, $max) = [3, 6];
range($min, $max);

По крайней мере, так я пришел к этому ответу. Поиск в Google: PHP argument unpacking

Очень хорошо. Я думал о ($min, $max) или {$min, $max}. Но list - это то, что я искал

ferdynator 12.07.2018 15:11
<?php

function add(int ...$arr) {           // typehint ready
    return array_sum($arr);
}

var_dump(add(1, 2, 3, ...[1, 2, 3])); // int(12)

Другой пример с ... - operator.
RFC: https://wiki.php.net/rfc/variadics

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