Три точки, при вызове метода или функции в 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);
}