Qual é o significado de Três pontos (...) em PHP?
Enquanto estou instalando o Magento 2 no meu servidor, recebo um erro. Investigue o código e descubra que há um ponto Três (...), que está produzindo o erro. Eu mencionei o código abaixo
return new $type(...array_values($args));
Respostas:
O
...$str
é chamado de operador splat em PHP .Este recurso permite que você capture um número variável de argumentos para uma função, combinado com argumentos "normais" passados, se desejar. É mais fácil ver com um exemplo:
A lista de parâmetros na declaração da função contém o
...
operador e basicamente significa "... e todo o resto deve entrar em $ strings". Você pode passar 2 ou mais argumentos para esta função e o segundo e os subsequentes serão adicionados ao array $ strings, prontos para serem usados.Espero que isto ajude!
fonte
[
e]
. Não é um grande benefício, mas acho que fica bem.function myFunc($foo, string ...$bar)
. Em seguida,$bar
fornece à sua função um array de strings e nada mais, garantido em tempo de execução. Você não pode fazer isso com um único parâmetro de matriz.function get_data($fname,$lname,$age)
terá que mudar se você quiser campos diferentes daqueles trêsfunction get_data(...$fields)
não precisa mudar, você só precisa especificar os campos que deseja$fields
. @heykatiebenCada resposta se refere à mesma postagem do blog, além delas, aqui está a documentação oficial sobre listas de argumentos de comprimento variável :
http://php.net/manual/en/functions.arguments.php#functions.variable-arg-list
Parece que operador "splat" não é um nome oficial, mas é fofo!
fonte
Existem DOIS usos para o token de reticências (...) PHP - pense neles como empacotar um array e desempacotar um array. Ambos os propósitos se aplicam a argumentos de função.
Pacote
Ao definir uma função, se você precisar de um número dinâmico de variáveis fornecidas para a função (ou seja, você não sabe quantos argumentos serão fornecidos para aquela função quando chamada no código), use o token de reticências (...) para capturar todos os argumentos restantes fornecidos para essa função em uma matriz que seja acessível dentro do bloco de funções. O número de argumentos dinâmicos capturados por reticências (...) pode ser zero ou mais.
Por exemplo :
Quando o empacotamento é usado na instanciação da função, reticências (...) captura todos os argumentos restantes , ou seja, você ainda pode ter qualquer número de argumentos iniciais fixos (posicionais):
Descompacte
Como alternativa, ao chamar uma função, se os argumentos que você fornece para essa função são combinados anteriormente em uma matriz, use o token de reticências (...) para converter essa matriz em argumentos individuais fornecidos para a função - cada elemento da matriz é atribuído ao respectivo variável de argumento de função nomeada na definição da função.
Por exemplo:
A descompactação é particularmente útil ao usar funções de array para manipular arrays ou variáveis.
Por exemplo, descompactando o resultado de array_slice :
fonte
Para usar este recurso, apenas avise ao PHP que ele precisa descompactar o array em variáveis usando o
... operator
. Veja aqui para obter mais detalhes, um exemplo simples poderia ser assim:fonte
O que significa que ele decompõe uma matriz associativa em uma lista. Portanto, você não precisa digitar N parâmetros para chamar um método, apenas um. O método If permite um parâmetro decomposto e se os parâmetros são do mesmo tipo.
Para mim, o mais importante sobre o operador splat é que ele pode ajudar a digitar os parâmetros da matriz de dicas:
ele economiza algum esforço no controle de tipo, especialmente ao trabalhar com coleções enormes ou muito orientado a objetos.
Importante notar é que
...$array
decompõe uma matriz, independentemente do tipo de seus itens , portanto, você também pode seguir o caminho feio:Mas, por favor, não faça isso.
fonte
Este é o chamado operador "splat". Basicamente, essa coisa se traduz em "qualquer número de argumentos"; introduzido com PHP 5.6
Veja aqui para mais detalhes.
fonte
Parece que ninguém mencionou isso, então veio para ficar [Isso também ajudará o Google (e outros SEs) a guiar os desenvolvedores que estão solicitando parâmetros de descanso em PHP ]:
Como indicado aqui, é chamado de Parâmetros de descanso em JS e eu prefiro essa nomenclatura significativa a esse splat!
No PHP, a funcionalidade fornecida por ... args é chamada de funções Variadic que são introduzidas no PHP5.6. A mesma funcionalidade foi usada para ser implementada usando
func_get_args()
.Para usá-lo corretamente, você deve usar a sintaxe de parâmetros de resto, em qualquer lugar que ajude a reduzir o código clichê .
fonte
Eu gostaria de compartilhar um uso deste operador no framework Magento, onde ele instancia objetos com parâmetros dinâmicos configuráveis (arquivos de configuração XML).
Como podemos ver a
createObject
função do fragmento de código a seguir, ela recebe uma matriz dos argumentos preparados para a criação do objeto. Em seguida, ele usa o...
operador (três pontos) para passar os valores da matriz como argumentos reais para o construtor da classe.fonte
é um operador splat ou scatter em PHP
referência: operador splat ou scatter em PHP
fonte
No PHP 7.4, a reticência também é o operador Spread :
Fonte: https://wiki.php.net/rfc/spread_operator_for_array
fonte