Вопрос:
В чем смысл трех точек (…) в 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