Оператор расширения без массива в качестве аргумента функции/методаPhp

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Оператор расширения без массива в качестве аргумента функции/метода

Сообщение Anonymous »

Просматривая Symfony CurlHttpClient, я нашел следующую строку кода:

Код: Выделить всё

$this->defaultOptions['buffer'] ??= self::shouldBuffer(...);
Я никогда не видел синтаксис расширения без следующего за ним массива (например, ...$array) и не совсем уверен, почему этот синтаксис используется, но он кажется правильным синтаксисом PHP, поскольку нет ошибки компилятора.
Я написал крошечный скрипт, чтобы воспроизвести эту ситуацию, и кажется, что функция просто не вызывается:

Код: Выделить всё

function my_test(array $arr) {
echo("asdf");
}

my_test(...);
Ожидаемый результат — «asdf», фактический результат — ничего.
Я также пытался воспроизвести пример в контексте объекта, но похоже, что первый вызов метода $this->test(...) просто не происходит, поскольку оператор print_r() выполняется только один раз:

Код: Выделить всё

class A {
public function __construct(array $args)
{
$this->test(...);
$this->test($args);
}

public function test(array $args) {
print_r($args);
}
}

new A(['asdf']);
В чем смысл этого синтаксиса и почему он является допустимым синтаксисом PHP?

Подробнее здесь: https://stackoverflow.com/questions/797 ... d-argument
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»