
Temos o prazer de apresentar o lançamento final principal do PhpStorm este ano! Abaixo do corte está uma análise detalhada de todas as mudanças e novos recursos.
- PHP 8 : suporte para todos os recursos de linguagem e atributos de tempestade .
- PHPStan Psalm .
- Xdebug 3 , IDE.
- HTTP- Guzzle cURL.
- .
- Mermaid.js, , .
- Git stage changelists.
- SQL MongoDB.
- Tailwind CSS .
PHP 8
PHP 8.0 lançado. Muito obrigado a todos os contribuidores e gerentes de lançamento!
PhpStorm 2020.3 suporta todas as últimas alterações de idioma. Vamos dar uma olhada no que está disponível e como usá-lo no IDE.
Versão do idioma na barra de status
Agora, a barra de status sempre exibe a versão PHP atual do projeto. Você também pode mudar a versão a partir daí.

Se o botão de rádio não estiver ativo, significa que o limite da versão do PHP está definido em composer.json.
Argumentos nomeados
No PHP 8, argumentos para funções e métodos podem ser passados especificando um nome de parâmetro. As chamadas agora são documentadas automaticamente e os parâmetros opcionais são opcionais no sentido completo da palavra.
Usando a correção rápida Adicionar identificadores de nome , você pode adicionar nomes aos argumentos:

Erros de digitação ou nomes errados de argumentos são destacados:

Se o valor passado corresponder ao valor do parâmetro padrão, você pode removê-lo com segurança: em

vez da matriz de opções, você pode usar argumentos nomeados para passar um conjunto de parâmetros, apenas passando apenas os necessários. Os argumentos passados dessa maneira são seguros para o tipo, ao contrário dos elementos da matriz.

Atributos
Os atributos são uma forma nova e estruturada de especificar metadados em PHP em vez de comentários PHPDoc.
Para criar um atributo, você deve declarar uma classe e adicionar um marcador
#[Attribute]
. Aqui o PhpStorm o ajudará com realce, autocompletar código, busca por usos, refatorações e mais.

O próprio PHP apenas verifica a validade dos atributos quando chamado
ReflectionAttribute::newInstance()
. E se você não acessar os atributos através do Reflection, eles serão completamente ignorados, para não carregar classes desnecessárias e não criar objetos.
Mas o PhpStorm validará tudo no editor sem executar o Reflection API. As seguintes regras são verificadas:
- A classe especificada pode realmente ser um atributo.
- Este atributo se aplica apenas nos locais permitidos: classe, propriedade, método, parâmetro, função ou constante de classe.
- O atributo é repetido apenas se for declarado com um sinalizador
Attribute::IS_REPEATABLE
.
Aqui estão os atributos em ação com o Symfony:

Atributos do PHP 8 Storm
Vários atributos estão disponíveis no PhpStorm 2020.3 fora da caixa no namespace
\JetBrains\PhpStorm\
.
Você pode usá-los imediatamente em sua base de código sem conectar nada.
Mas se você usar outras ferramentas de análise estática e não quiser receber erros de Classe não encontrada , pode valer a pena adicionar o pacote de atributos JetBrains / phpstorm-attribute como uma dependência do
composer.json
.
# [Descontinuada]
Use este atributo como uma tag PHPDoc @deprecated para marcar métodos, classes ou constantes de classe que serão removidos no futuro.
A vantagem aqui é que você pode especificar uma substituição para o código obsoleto e será mais fácil para o usuário atualizar.
Vamos dar uma olhada em um exemplo do mundo real. No Symfony 5.2 lançado recentemente , o método está
\Symfony\Component\DependencyInjection\Alias::setPrivate()
obsoleto . Se você adicionar um atributo lá
#[Deprecated]
, você pode simplificar a migração.
#[Deprecated(
reason: 'since Symfony 5.2, use setPublic() instead',
replacement: '%class%->setPublic(!%parameter0%)'
)]

# [ArrayShape]
Este atributo é útil para trabalhar com estruturas de dados simples ou matrizes semelhantes a objetos quando uma classe não pode ser declarada por algum motivo.
A sintaxe é assim:
#[ArrayShape([
// ‘key’ => ’type’,
‘key1’ => ‘int’,
‘key2’ => ‘string’,
‘key3’ => ‘Foo’,
‘key3’ => App\PHP 8\Foo::class,
])]
function functionName(...): array
O tipo pode ser especificado como string ou como referência de classe na forma de string FQN ou constante
::class
.

A matriz que define a "forma" pode ser colocada em uma constante e reutilizada:
const MY_ARRAY_SHAPE = [];
#[ArrayShape(MY_ARRAY_SHAPE)]

No PhpStorm já anotamos
#[ArrayShape]
algumas funções padrão do PHP com um atributo , por exemplo
parse_url()
.
Felizmente, a sintaxe do atributo de linha única é compatível com versões anteriores. Ou seja, se você escrever
#[ArrayShape]
em uma linha em um projeto PHP 7, o interpretador PHP interpretará esta linha como um comentário.
Ao contrário do interpretador PHP, PhpStorm irá analisar os atributos de qualquer maneira! Portanto, mesmo se seu projeto estiver executando PHP 7.4 ou inferior, você ainda se beneficiará com a adição
#[ArrayShape]
.
# [Imutável]
Objetos imutáveis não podem ser modificados após a inicialização ou criação. Seu uso torna o estado do programa mais previsível e fácil de depurar.
Um atributo
#[Immutable]
pode ser usado para marcar uma classe inteira ou propriedades específicas para indicar que elas não podem ser alteradas.
O PhpStorm verificará o uso de tais objetos e propriedades e destacará as tentativas de modificação.

Alterar uma propriedade por padrão é permitido no construtor, mas também pode ser permitido em métodos privados / protegidos. Isso é feito usando as constantes
CONSTRUCTOR_WRITE_SCOPE
,
PRIVATE_WRITE_SCOPE
,
PROTECTED_WRITE_SCOPE
passado para o construtor
#[Immutable]
.

# [Puro]
Este atributo marca funções puras, ou seja, aquelas que não produzem efeitos colaterais. Essas funções podem ser removidas com segurança se o resultado de sua execução não for usado posteriormente.

Se a função estiver marcada como limpa, mas houver uma tentativa de alterar algo fora do escopo externo em seu corpo, o PhpStorm destacará o código não seguro.

Todas as funções padrão do PHP puro já estão marcadas com este atributo no PhpStorm.
# [ExpectedValues]
Usando este atributo, você pode especificar quais valores a função assume como parâmetros e quais valores ela pode retornar.
É praticamente a mesma coisa que acontece
expectedArguments()
em
.phpstorm.meta.php
. A única diferença é que a metaversão é bastante auxiliar, e o atributo indica rigidamente que não há outros valores possíveis.
Por exemplo, considere a função de contagem:
count ( array|Countable $array_or_countable [, int $mode = COUNT_NORMAL ] ) : int
Seu segundo argumento é um inteiro, mas na verdade não é um inteiro arbitrário, mas uma das constantes
COUNT_NORMAL
ou
COUNT_RECURSIVE
.
Veja como o atributo
#[ExpectedValues]
vai melhorar a situação:

Ou seja, o preenchimento automático apareceu e, se algo mais for aprovado, o erro é destacado.
Como especificar valores possíveis ou máscaras de bits
:
:
- :
#[ExpectedValues(values: [1,2,3])]
- :
#[ExpectedValues(values: [‘red’, ‘black’, ‘green’])]
- :
#[ExpectedValues(values: [COUNT_NORMAL, COUNT_RECURSIVE])]
- :
#[ExpectedValues(values: [Code::OK, Code::ERROR])]
:
-
#[ExpectedValues(values: [1,2,3])]
, .
-
#[ExpectedValues(flags: [1, 2, 3])]
, ,1 | 3
.
-
#[ExpectedValues(valuesFromClass: MyClass::class)]
, `MyClass
`.
-
#[ExpectedValues(flagsFromClass: ExpectedValues::class)]
, `MyClass`.
Outro exemplo # [ExpectedValues]
Vamos pegar um ajudante
response()
do Laravel. Ele usa o código de status HTTP como o segundo parâmetro.
Existem dois problemas
- Sem preenchimento automático com códigos possíveis
- Sem validação de valor no editor

Vamos corrigir isso adicionando o atributo
#[ExpectedValues(valuesFromClass: Response::class)]

# [NoReturn]
Algumas funções podem interromper a execução do script. Marcar funções como pontos de saída com um atributo
#[NoReturn]
melhora a análise do fluxo de controle.

# [Língua]
Este atributo pode ser adicionado a parâmetros de string que esperam texto em qualquer idioma, como RegExp, SQL, DQL e assim por diante.
Para argumentos, opções de destaque e adicionais serão exibidas.

Vamos voltar aos novos recursos do PHP 8.
Declaração de propriedades no construtor
As propriedades regulares podem ser convertidas em promovidas ou vice-versa usando a correção rápida Converter em propriedade promovida .

PhpStorm garante que as propriedades sejam usadas apenas da maneira permitida no PHP 8:
- Você só pode declarar propriedades no construtor.
- Não pode ser declarado em um construtor abstrato.
- Você não pode declarar uma propriedade variadic dessa maneira.
- A propriedade não pode ser do tipo 'Callable'.
- Substituições de propriedade não são permitidas.


Se a propriedade for declarada de uma nova maneira, mas a inicialização permanecer no corpo do construtor, o PhpStorm se oferecerá para excluí-la.

Expressão de correspondência
A nova expressão é semelhante a,
switch
mas usa comparação estrita e pode ser atribuída a uma variável ou retornada.
O PhpStorm detecta se um bloco pode
switch
ser reescrito
match
e fará isso automaticamente com uma correção rápida pressionando Alt + Enter:

Pode ser difícil ver o uso incorreto de uma nova expressão, então o PhpStorm destacará todos os erros.


Valores duplicados serão encontrados nas condições: Uma

expressão de correspondência com uma única ramificação e uma ramificação padrão pode ser substituída com segurança por uma expressão ternária.

E se apenas o branch padrão for deixado, a correspondência não será necessária.

Finalmente, se os corpos forem iguais em ramos diferentes, eles podem ser mesclados.

Operador Nullsafe
Em vez de um monte de condições com uma verificação de nulo, agora você pode usar uma cadeia de chamadas com um novo operador
?->
.
O PhpStorm verificará o uso correto do operador:

Vírgula pendurada
Agora é permitido adicionar uma vírgula após o último argumento ao chamar funções e em uma lista de encerramento
use
.

Capturas não capturadas
No PHP 8, você pode capturar uma exceção em um bloco catch sem uma variável.

Jogue expressão
As exceções agora podem ser lançadas em funções de seta e operadores curtos
??
, bem como em ternário
? :
.

Você pode usar uma abreviação
thr
e pressionar tab - este é um modelo dinâmico .

Constant :: class em objetos
Anteriormente, para obter o FQN de um objeto, você tinha que usar uma função
get_class()
. No PHP 8, a chamada
get_class($object)
pode ser substituída com segurança por
$object::class
.
Na verdade, pressionando Alt + Enter, essa substituição pode ser feita. O uso incorreto da constante
::class
PhpStorm será destacado.

Novas funções para strings: str_contains (), str_starts_with (), str_ends_with ()
Como posso verificar se uma string contém uma palavra específica? É a pergunta sobre PHP mais vista no Stack Overflow. O PHP 8 tem uma resposta clara para esta pergunta: use uma função
str_contains()
.
PhpStorm 2020.3 todas as chamadas
strpos()
que podem ser substituídas por
str_contains()
:

Existem também novas
str_starts_with()
, e
str_ends_with()
para determinar se a substring específica da linha inicial ou final. O PhpStorm destaca onde as chamadas
substr()
podem ser substituídas por novas alternativas:

Avisos de motor reclassificado
No PHP 8, o tipo de aviso lançado foi revisado para muitos erros. Ou seja, em vez de Aviso em muitos casos, haverá exceção ou erro de tipo.
No PhpStorm, devido a isso, algumas inspeções têm dois níveis de severidade diferentes: para PHP 8 e para versões anteriores.

Esses são todos os mais notáveis do PHP 8. Há um monte de pequenas mudanças que serão visíveis quando você atualizar para o PHP 8.
Suporte de salmos e PHPStan
Ambos os analisadores estáticos podem ser usados no PhpStorm 2020.3 para destacar problemas diretamente no editor.

Se PHPStan ou Salmo forem adicionados como dependências em
composer.json
, haverá um ícone de chave inglesa próximo a eles que abre as configurações da ferramenta.

A partir daí, você pode ir para as configurações de inspeção e ativar o realce no editor. Isso é feito selecionando a inspeção apropriada em PHP | Ferramentas de qualidade em Configurações / Preferências | Editor | Inspeções .
️ É melhor ligar apenas um dos instrumentos, em vez de ambos ao mesmo tempo.

Aqui você também pode especificar o caminho para o arquivo de configuração e configurar os argumentos da linha de comando.
️ O PHPStan pode funcionar sem um arquivo de configuração, mas o Salmo o exige. Se houver
psalm.xml
ou estiver no diretório raiz
phpstan.neon
, o PhpStorm os puxará automaticamente.
Quando tudo estiver configurado, abra qualquer arquivo e você verá um destaque dos analisadores estáticos. Pode haver um pequeno atraso antes que a luz de fundo apareça.

Anotações
Todas as anotações de Salmos
@psalm-*
agora estão corretamente destacadas no editor. Mas, em geral, agora você pode remover com segurança o prefixo
@psalm-
das tags, ou seja,
@psalm-return
->
@return
e
@psalm-param
->
@param
.

Suporte de tipo
Adicionamos suporte para alguns tipos de salmos e, com base nas informações das tags, melhoramos nossa inferência de tipo. Isso tornou as verificações, a geração de código e o preenchimento automático mais precisos.
Pseudo-tipos Pseudo-tipos de
salmo são suportados, como escalar, numérico, etc.

Constantes em tipos
Oferece suporte a concatenação e especificação de constantes por meio de
*
tagsparam e var...

Dicas de tipo para matrizes Descrições de matrizes também
são
array<array-key, Type>
suportadas, incluindo as aninhadas.

Genéricos e @tempate O
suporte genérico é um recurso para usuários avançados que não possui uma especificação correta completa e muitos casos extremos . No entanto, decidimos implementar suporte básico para
@template
a sintaxe baseada em Salmos para ver como isso será usado.
Até agora, apenas o caso mais primitivo é suportado, quando a função retorna um de seus parâmetros.

Este suporte genérico é muito básico e experimental. Queremos entender como ele será usado e o que precisa ser implementado primeiro. Adoraríamos ouvir de você, especialmente na forma de casos de uso reais para nosso rastreador .
Xdebug 3
O popular depurador de PHP foi atualizado para torná-lo muito mais rápido e fácil de configurar. Leia mais sobre o Xdebug 3 no guia de atualização .
Para configurar o Xdebug 3, uma opção xdebug.mode agora é suficiente (como esta
XDEBUG_MODE=debug
).
Além disso, a porta Xdebug padrão foi alterada: em vez de
9000
agora
9003
. Para simplificar a migração, o PhpStorm escuta em ambas as portas por padrão. As configurações de porta e outras opções do Xdebug podem ser encontradas em Preferências / Configurações | Idiomas e frameworks | PHP | Depurar .

Melhorias no depurador
Os recursos de depuração no PhpStorm foram expandidos com dois novos recursos.
Dicas interativas
Agora no modo de depuração, você pode expandir a saída de variáveis para ver todos os campos. Você também pode alterar os valores ali.

Observações embutidas
Nas versões anteriores, você podia adicionar uma variável ou expressão à lista de observação e observar a mudança de valor passo a passo.
No PhpStorm 2020.3, você pode adicionar relógios diretamente no contexto e eles serão exibidos ao lado do código.
Clique em Adicionar como relógio embutido no pop-up da dica.

Ou clique em Adicionar relógio embutido no menu de contexto do editor.

Ou selecione a variável e selecione Adicionar Observação Inline no menu de contexto .

Destacando e renomeando variáveis no Twig
Selecione uma variável ou coloque o cursor sobre ela e todos os seus usos no modelo serão destacados. E para renomear todas as ocorrências, pressione Shift + F6.

Co-desenvolvimento - Code With Me
PhpStorm 2020.3 vem com o plugin Code With Me , a nova ferramenta de desenvolvimento colaborativo e programação em pares da JetBrains. Com ele, você pode compartilhar um projeto aberto com outros usuários e trabalhar nele em tempo real. Leia mais sobre Code With Me nestas postagens .

Cliente HTTP
Integrando Guzzle com Cliente HTTP em PhpStorm
Guzzle é um dos clientes HTTP mais populares para PHP. Imagine que em algum lugar do código haja uma solicitação HTTP e você queira testá-la sem executar o próprio código. Anteriormente, você teria que copiar todos os parâmetros manualmente.
PhpStorm 2020.3 permite que você converta solicitações simples do Guzzle em arquivos .http. Se a solicitação for compatível, um ícone aparecerá ao lado dela. Ao clicar nele, você abrirá um novo arquivo de trabalho com a URL correta, parâmetros de solicitação, métodos, cabeçalhos, corpo.

Agora, a partir do editor, a consulta pode ser executada e manipulada, e então salva como um arquivo http no projeto.
Mais sobre o cliente HTTP na análise do vídeo .
Copiar solicitação HTTP para cURL
Para exportar a solicitação HTTP para uma string cURL, pressione Alt + Enter na solicitação no editor e selecione Converter em cURL e copiar para a área de transferência . Agora ele pode ser inserido no terminal, documentação ou qualquer ferramenta de teste de API.

editor
Melhorias para Markdown
Você pode usar a sintaxe Mermaid.js em arquivos markdown para descrever tabelas e gráficos . O PhpStorm agora pode renderizar visualizações para eles diretamente no editor. Incluído em Preferências / Configurações | Idiomas e frameworks | Markdown .

Agora também é possível reformatar o conteúdo de arquivos .md de acordo com estilos populares. Feito pressionando ⌘⌥L / Ctrl + Alt + L.
Configurável em Preferências / Configurações | Editor | Estilo de código | Markdown .

Finalmente, se você clicar no botão Visualização de rolagem automática no canto superior direito do editor, a rolagem da visualização e o texto serão sincronizados.
Correção ortográfica e gramatical aprimorada
Erros de digitação e gramática agora podem ser corrigidos muito mais rápido:
- Primeiro, uma explicação do erro aparecerá em uma janela pop-up.
- E se você pressionar Alt + Enter no texto destacado, as opções de substituição serão oferecidas na parte superior, e não estarão ocultas em um subitem, como antes.

Divida o editor arrastando e soltando
Para abrir vários arquivos lado a lado, basta arrastar a guia para o canto desejado da tela.

Existe outra maneira de abrir um arquivo no modo dividido - Shift + Enter.
A combinação pode ser clicada no arquivo selecionado na visualização do Projeto ou nos resultados da pesquisa de arquivo.

Guia de visualização
Se você precisa visualizar os arquivos rapidamente, agora não precisa abrir cada um em uma guia separada. Você pode usar a nova guia Visualização .
Para ativá-lo, clique na engrenagem na visualização Projeto e selecione Ativar guia de visualização e Abrir arquivos com um único clique .

Você também pode visualizar os arquivos pressionando a barra de espaço na visualização Projeto sem abri-los.

IDE
Melhorias para pesquisa em todos os lugares
Os resultados são agrupados por relevância:

Você pode fazer operações matemáticas simples sem abrir a calculadora do

Você pode pesquisar pelo histórico do Git:

Mudança automática para tema claro ou escuro
Em Preferências / Configurações | Aparência e comportamento | Aparência | Selecione o tema Sincronizar com o sistema operacional .

Novo conjunto de teclas de atalho para macOS
Um layout de atalho de teclado alternativo para macOS minimiza o uso de teclas de função para que você não precise esticar a mão em todo o teclado ao realizar ações básicas. Por exemplo, em vez de Fn + Shift + F6, a refatoração Renomear usa ⌥ + ⌘ + R.

Palavras em vez de ícones para teclas de atalho do macOS
Você pode fazer com que as palavras Alt, Cmd, etc. apareçam em vez de ícones como ⌘ . Habilitado
na seção Registro pela opção ide.macos.disable.native.shortcut.symbols . Para acessar o registro, use Find Action Cmd + Shift + A e escreva Registry lá .
Definir PhpStorm como aplicativo padrão para diferentes arquivos
As preferências | Configurações / Editor / Tipos de arquivo clique em Associate file types with PhpStorm… . Na caixa de diálogo, selecione as extensões de arquivo e elas serão abertas no PhpStorm.
É necessário reinicializar no macOS.

Os modelos podem gerar vários arquivos
Você pode gerar simultaneamente vários arquivos de uma vez, por exemplo, um esqueleto para um módulo ou uma visualização de controlador de combinação.
Em Preferências / Configurações | Editor | Clique em Arquivo e Modelos de Código


podem ser usadas no campo Nome do arquivo . E aqui está um exemplo de como gerar um controlador e modelo no Symfony:
${NAME}


Suporte de estágio Git
Você pode ativá-lo marcando a caixa de seleção Ativar área de teste em Preferências / Configurações | Controle de versão | Git .
A janela da ferramenta Commit (Cmd + 0 / Alt + 0) mostrará dois grupos de arquivos: testados e não testados.
Para adicionar um arquivo ao teste , clique no + próximo a ele.

Ou você pode selecionar linhas específicas e adicioná-las com um ícone no editor. Neste caso, você pode confirmar algumas das alterações do arquivo e continuar trabalhando no resto.

Ferramentas DB
PhpStorm inclui recursos do DataGrip prontos para uso , que são abordados na visão geral do lançamento do DataGrip 2020.3 de nossos colegas.
SQL para MongoDB
Agora você pode usar consultas SQL no MongoDB. PhpStorm 2020.3 suporta
SELECT-
consultas
JOIN
,
WHERE
,
GROUP BY
,
HAVING
,
ORDER BY
,
LIMIT
,
OFFSET
e todos os recursos do MongoDB além mapear, reduzir, filtro, e deixe. Leia mais na postagem do blog .

Rede
Como sempre, PhpStorm inclui todas as atualizações do WebStorm 2020.3 . O mais notável é o suporte para Tailwind CSS.
CSS Tailwind
PhpStorm complementa as classes Tailwind em arquivos HTML e após a diretiva @apply. Ele também fornecerá conclusão de pseudo-classe.

Se você passar o mouse sobre uma classe em arquivos HTML e CSS, uma visualização do CSS resultante será exibida. A visualização também está disponível durante a conclusão do código, na janela pop-up de documentação F1 / Ctrl + Q.

PhpStorm suporta personalizações de tailwind.config.js. Por exemplo, se você definir um tema com novas cores, na janela pop-up de preenchimento automático serão criadas classes com o nome da cor personalizada.

Você pode baixar o PhpStorm 2020.3 na página “ Novidades ”.
E aqui está um vídeo (em inglês) mostrando as principais características do lançamento:
Isso é todo esse tempo. Teremos o maior prazer em ter perguntas, desejos, relatórios de bugs e apenas ideias nos comentários.