Значение трех точек (…) в PHP

Вопрос:В чем смысл трех точек (...) в PHP? Пока я устанавливаю Magento 2 в своем Sever, я получил ошибку. Изучите код и выясните, что существует три точки (...), которые создают ошибку. Я упомянул код ниже return new $type(...array_values($args)); Лучший ответ: ...$str называется оператором splat в PHP. Эта функция позволяет вам записывать переменное количество аргументов в

Вопрос:

В чем смысл трех точек (…) в PHP?

Пока я устанавливаю Magento 2 в своем Sever, я получил ошибку. Изучите код и выясните, что существует три точки (…), которые создают ошибку. Я упомянул код ниже

return new $type(…array_values($args)); Лучший ответ:

…$str называется оператором splat в PHP.

Эта функция позволяет вам записывать переменное количество аргументов в функцию в сочетании с “нормальными” аргументами, переданными, если хотите. Это проще всего увидеть на примере:

function concatenate($transform, …$strings) { $string = »; foreach($strings as $piece) { $string .= $piece; } return($transform($string)); } echo concatenate(«strtoupper», «I’d «, «like «, 4 + 2, » apples»); // This would print: // I’D LIKE 6 APPLES

Список параметров в объявлении функции имеет в нем оператор …, и это в основном означает “… и все остальное должно идти в $stringings”. Вы можете передать 2 или более аргументов в эту функцию, а второй и последующие будут добавлены в массив $strings, готовый к использованию.

Надеюсь, это поможет!

Ответ №1

Каждый ответ относится к одному и тому же сообщению в блоге, кроме них, вот официальная документация о списках аргументов переменной длины:

http://php.net/manual/en/functions.arguments.php#functions.variable-arg-list

В PHP 5.6 и более поздних списки аргументов могут включать в себя токен…, обозначающий, что функция принимает переменное число аргументов. Аргументы будут переданы в данную переменную в виде массива.

Кажется, оператор “Сплат” не является официальным названием, но все же это мило!

Ответ №2

Чтобы использовать эту функцию, просто предоставьте PHP, чтобы она распаковывала массив в переменные с помощью … operator. Подробнее см. здесь, простой пример может выглядеть следующим образом:

$email[] = «Hi there»; $email[] = «Thanks for registering, hope you like it»; mail(«someone@example.com», …$email); Ответ №3

Это так называемый оператор “splat”. В основном эта вещь переводится как “любое количество аргументов”; введенный с PHP 5.6

Подробнее см. здесь.

Ответ №4

Кажется, никто не упомянул об этом, поэтому здесь, чтобы остаться [Это также поможет Google (и другим SE) направлять разработчиков, которые запрашивают параметры отдыха в PHP ]:

Как указано здесь, это называется ” Параметры покоя” на JS, и я предпочитаю это осмысленное именование, а не сплат!

В PHP функциональность, предоставляемая … args, называется функциями Variadic, которые представлены в PHP5.6. Такая же функциональность была использована для реализации с помощью func_get_args().

Чтобы использовать его правильно, вы должны использовать синтаксис остальных параметров, где бы это ни помогло уменьшить стандартный код.

Ответ №5

Я хотел бы поделиться использованием этого оператора в среде Magento, где он создает объекты с динамически настраиваемыми параметрами (файлы конфигурации XML).

Как мы видим из функции createObject из следующего фрагмента кода, она принимает массив аргументов, подготовленных для создания объекта. Затем он использует оператор … (три точки) для передачи значений массива в качестве реальных аргументов конструктору класса.

<?php namespace MagentoFrameworkObjectManagerFactory; abstract class AbstractFactory implements MagentoFrameworkObjectManagerFactoryInterface { … /** * Create object * * @param string $type * @param array $args * * @return object * @throws RuntimeException */ protected function createObject($type, $args) { try { return new $type(…array_values($args)); } catch (TypeError $exception) { … } } … } Ответ №6

Существует два варианта использования PHP-токена ellipsis (…), которые представляют собой упаковку массива и распаковку массива. Обе цели применимы к аргументам функции.

Пакет

При определении функции, если вам нужно динамическое число переменных, предоставленных функции (т.е. вы не знаете, сколько аргументов будет предоставлено этой функции при последующем вызове в коде), используйте многоточие (…) токен для записи всех оставшихся аргументов, предоставленных этой функции, в массив, который доступен внутри функционального блока.

Например,:

// function definition function sum(…$numbers) { // use ellipsis token when defining function $acc = 0; foreach ($numbers as $n) { $acc += $n; } return $acc; } // later, call the function echo sum(1, 2, 3, 4); // provide any number of arguments > 10 // and again… echo sum(1, 2, 3, 4, 5); > 15

Распаковка

В качестве альтернативы, при вызове функции, если аргументы, которые вы передаете этой функции, ранее объединены в массив, используйте токен ellipsis (…), чтобы преобразовать этот массив в список аргументов, предоставленный функции, которая назначает функцию каждый элемент массива для соответствующей переменной аргумента функции, указанной в определении функции.

Например:

function add($a, $b) { return $a + $b; } $a = [1, 2]; echo add(…$a); // use ellipsis token when calling function > 3

Это особенно полезно при использовании функций массива для манипулирования массивами или переменными.

Например:

function toptwo ($first, $second) { echo «$firstn$second»; } $steaks = array(‘ribeye’, ‘kc strip’, ‘t-bone’); toptwo(…array_slice($steaks, 0, 2)); > ribeye > kc strip

Оцените статью
Добавить комментарий