Na versão 8 do PHP uma função nova função foi adicionada, essa função é a match . Em suma ela é uma melhoria da antiga switch, que além do PHP está presente em muitas linguagens. Este artigo lista alguns exemplos e diferenças das funções.
Um exemplo clássico do switch:
Exemplo equivalente usando match:
Podemos notar que a expressão match precisa de menos código para ser escrita do que o switch,visto que não é necessário a utilização do comando break ao final de cada condição do match,pois esse comando já está implícito na função.Além disso, podemos colocar duas ou mais condições atribuídas a um mesmo valor usando vírgula e podemos receber o retorno da função através de uma variável.
O match, diferente do switch,usa comparações estritas, ou seja, não é possível comparar uma string com o número 3 e o número 3 em formato de string. Isso pode ser um problema inicialmente, pois essa exigência maior de tratamento de dados historicamente não está associada ao PHP.
Talvez a principal diferença do switch para o match seja o tratamento de erros, enquanto no switch erros não são retornados no match será lançada uma exceção do tipo UnhandledMatchError. Por isso geralmente encontramos exemplos do match sempre com a condição default como última opção, impedindo que a exceção seja lançada.
Para quem já usa PHP 8 a única vantagem que temos usando switch é realizar várias expressões por condição, ou seja quando o switch encontra uma combinação podemos executar várias linhas de código, recurso esse que o match não nos permite realizar. Segue o exemplo:
Switch |
Match |
|
Necessário PHP ^8.0 |
Não |
Sim |
Retorna um valor |
Não |
Sim |
Suporte a condição default |
Sim |
Sim |
Múltiplas condições |
Sim |
Sim |
Múltiplas expressões por condição |
Sim |
Não |
Break implícito |
Não |
Sim |
Lança uma exceção quando não há combinação |
Não |
Sim |
Comparação segura estrita de valores |
Não |
Sim |