Как передать в функцию / метод php массив вместо набора агрументов

27.02.2018 10:00:54

Три точки, при вызове метода или функции в PHP, позволяют передать массив так, словно каждый его элемент передаться как отдельный аргумент функции.

Такое будет проще понять на примере ниже.

Сразу отмечу, что данный способ работает только в PHP версии 5.6.0 и выше.

Допустим у нас есть функция обертка test1 она получает на вход 3 параметра, что-то делает, а затем вызывает другую функцию test2 на вход которой нужно передать те же самые значения, что и для test1

Самый простой вариант реализации:

 
function test1($x, $y, $z)
{
  // Do something
  test2($x, $y, $z);
}

- но, такой вариант крайне неудобен. Может измениться количество передаваемых параметров, или их 20, и перечислять все некрасиво.

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

 
function test1()
{
  $args = func_get_args();
  // Do something
  test2(... $args);
}

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

 
function test1()
{
  $args = func_get_args();
  $sType = array_shift($args); 
  if($sType == 'test')
  {
    // Do something
  }
  test2(... $args);
}

Для поддержки старых версий php можно использовать такой вариант:

 
  if(version_compare(PHP_VERSION, '5.6.0', '>=')){
    $instance = new $class(...$args);
  } else {
    $reflect  = new ReflectionClass($class);
    $instance = $reflect->newInstanceArgs($args);
  }

Есть системные пометки.

Категории: PHP
Пометки: Значение трех точек (…) в PHP, троеточие в PHP
Яндекс.Метрика