¡Nos complace presentar la versión principal final de PhpStorm este año! Debajo del corte hay un análisis detallado de todos los cambios y nuevas características.
- PHP 8 : soporte para todas las características del lenguaje y atributos de tormenta .
- PHPStan y Psalm se pueden utilizar para resaltar errores en el editor.
- Xdebug 3 , IDE.
- HTTP- Guzzle cURL.
- .
- Mermaid.js, , .
- Git stage changelists.
- SQL MongoDB.
- Tailwind CSS .
PHP 8
Lanzamiento de PHP 8.0 . ¡Muchas gracias a todos los colaboradores y administradores de versiones!
PhpStorm 2020.3 admite todos los últimos cambios de idioma. Echemos un vistazo a lo que está disponible y cómo usarlo en el IDE.
Versión de idioma en la barra de estado
Ahora, la barra de estado siempre muestra la versión PHP actual del proyecto. También puede cambiar la versión desde allí.
Si el botón de opción no está activo, significa que el límite de la versión de PHP está establecido en composer.json.
Argumentos nombrados
En PHP 8, los argumentos a las funciones y métodos se pueden pasar especificando un nombre de parámetro. Las llamadas ahora se documentan automáticamente y los parámetros opcionales son opcionales en el sentido completo de la palabra.
Con la solución rápida Agregar identificadores de nombre , puede agregar nombres a los argumentos: los
errores tipográficos o los nombres erróneos de los argumentos se resaltan:
si el valor pasado coincide con el valor del parámetro predeterminado, puede eliminarlo de manera segura: en
lugar de la matriz de opciones, puede usar argumentos con nombre para pasar un conjunto de parámetros, simplemente pasando solo los necesarios. Los argumentos que se pasan de esta manera, a diferencia de los elementos de matriz, son seguros para los tipos.
Atributos
Los atributos son una forma nueva y estructurada de especificar metadatos en PHP en lugar de comentarios PHPDoc.
Para crear un atributo, debe declarar una clase y agregar un marcador
#[Attribute]
. Aquí PhpStorm lo ayudará a resaltar, completar el código, buscar usos, refactorizar y más.
PHP en sí solo verifica la validez de los atributos cuando se llama
ReflectionAttribute::newInstance()
. Y si no accedes a los atributos a través de Reflection, entonces se ignoran por completo para no cargar clases innecesarias y no crear objetos.
Pero PhpStorm validará todo en el editor sin ejecutar la API de Reflection. Se verifican las siguientes reglas:
- De hecho, la clase especificada puede ser un atributo.
- Este atributo se aplica solo en los lugares permitidos: una clase, propiedad, método, parámetro, función o constante de clase.
- El atributo se repite solo si se declara con una bandera
Attribute::IS_REPEATABLE
.
Estos son los atributos en acción con Symfony:
Atributos de PHP 8 Storm
Hay varios atributos disponibles en PhpStorm 2020.3 listos para usar en el espacio de nombres
\JetBrains\PhpStorm\
.
Puede usarlos inmediatamente en su base de código sin conectar nada.
Pero si además usa otras herramientas de análisis estático y no desea recibir errores de Clase no encontrada , entonces podría valer la pena agregar el paquete de atributos JetBrains / phpstorm-attribute como una dependencia de
composer.json
.
# [Obsoleto]
Utilice este atributo como una etiqueta PHPDoc @deprecated para marcar métodos, clases o constantes de clase que se eliminarán en el futuro.
La ventaja aquí es que puede especificar un reemplazo para el código obsoleto y será más fácil para el usuario actualizarlo.
Echemos un vistazo a un ejemplo del mundo real. En Symfony 5.2 recientemente lanzado , el método está
\Symfony\Component\DependencyInjection\Alias::setPrivate()
obsoleto . Si agrega un atributo allí
#[Deprecated]
, puede simplificar la migración.
#[Deprecated(
reason: 'since Symfony 5.2, use setPublic() instead',
replacement: '%class%->setPublic(!%parameter0%)'
)]
# [ArrayShape]
Este atributo es útil para trabajar con estructuras de datos simples o matrices similares a objetos cuando por alguna razón no se puede declarar una clase.
La sintaxis es así:
#[ArrayShape([
// ‘key’ => ’type’,
‘key1’ => ‘int’,
‘key2’ => ‘string’,
‘key3’ => ‘Foo’,
‘key3’ => App\PHP 8\Foo::class,
])]
function functionName(...): array
El tipo se puede especificar como una cadena o como una referencia de clase en forma de una cadena o constante FQN
::class
.
La matriz que define la "forma" se puede poner en una constante y reutilizar:
const MY_ARRAY_SHAPE = [];
#[ArrayShape(MY_ARRAY_SHAPE)]
En PhpStorm ya hemos anotado
#[ArrayShape]
algunas funciones estándar de PHP con un atributo , por ejemplo
parse_url()
.
Afortunadamente, la sintaxis de atributos de una sola línea es compatible con versiones anteriores. Es decir, si está escrito
#[ArrayShape]
en una línea en un proyecto PHP 7, el intérprete PHP interpretará esta línea como un comentario.
A diferencia del intérprete de PHP, PhpStorm analizará los atributos de todos modos. Entonces, incluso si su proyecto ejecuta PHP 7.4 o inferior, aún se beneficiará de la adición
#[ArrayShape]
.
# [Inmutable]
Los objetos inmutables no se pueden modificar después de la inicialización o creación. Su uso hace que el estado del programa sea más predecible y más fácil de depurar.
Se
#[Immutable]
puede usar un atributo para marcar una clase completa o propiedades específicas para indicar que no se pueden cambiar.
PhpStorm comprobará el uso de dichos objetos y propiedades y resaltará los intentos de modificación.
El cambio de una propiedad por defecto está permitido en el constructor, pero también se puede permitir en métodos privados / protegidos. Esto se hace usando las constantes
CONSTRUCTOR_WRITE_SCOPE
,
PRIVATE_WRITE_SCOPE
,
PROTECTED_WRITE_SCOPE
pasa al constructor
#[Immutable]
.
# [Puro]
Este atributo marca funciones puras, es decir, aquellas que no producen efectos secundarios. Estas funciones se pueden eliminar de forma segura si el resultado de su ejecución no se utiliza posteriormente.
Si una función está marcada como limpia, pero hay un intento de cambiar algo fuera del alcance externo en su cuerpo, PhpStorm resaltará el código inseguro.
Todas las funciones estándar de PHP puro ya están marcadas con este atributo en PhpStorm.
# [Valores esperados]
Con este atributo, puede especificar qué valores toma la función como parámetros y qué valores puede devolver.
Esto es prácticamente lo mismo que hace
expectedArguments()
en
.phpstorm.meta.php
. La única diferencia es que la metaversión es bastante auxiliar y el atributo indica rígidamente que no hay otros valores posibles.
Por ejemplo, considere la función de conteo:
count ( array|Countable $array_or_countable [, int $mode = COUNT_NORMAL ] ) : int
Su segundo argumento es un número entero, pero en realidad no es un entero arbitrario, sino una de las constantes
COUNT_NORMAL
o
COUNT_RECURSIVE
.
Así es como el atributo
#[ExpectedValues]
mejorará la situación:
es decir, ha aparecido la finalización automática y, si se pasa algo más, se resalta el error.
Cómo especificar valores posibles o 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`.
Otro ejemplo # [ExpectedValues]
Busquemos un ayudante
response()
de Laravel. Toma el código de estado HTTP como segundo parámetro.
Hay dos problemas
- Sin autocompletado con posibles códigos
- Sin validación de valor en el editor
Arreglemos esto agregando el atributo
#[ExpectedValues(valuesFromClass: Response::class)]
# [Sin retorno]
Algunas funciones pueden detener la ejecución del script. Las funciones de marcado, como los puntos de salida con un atributo,
#[NoReturn]
mejoran el análisis del flujo de control.
# [Idioma]
Este atributo se puede agregar a parámetros de cadena que esperan texto en algún idioma, como RegExp, SQL, DQL, etc.
Para los argumentos, aparecerán resaltados y opciones adicionales.
Volvamos a las nuevas funciones de PHP 8.
Declarar propiedades en el constructor
Las propiedades normales se pueden convertir en promocionadas o viceversa utilizando la solución rápida Convertir en propiedad promocionada .
PhpStorm garantiza que las propiedades solo se utilicen de la manera permitida en PHP 8:
- Solo puede declarar propiedades en el constructor.
- No se puede declarar en un constructor abstracto.
- No puede declarar una propiedad variádica de esta manera.
- La propiedad no puede ser de tipo 'Invocable'.
- No se permiten anulaciones de propiedad.
Si la propiedad se declara de una manera nueva, pero la inicialización permanece en el cuerpo del constructor, PhpStorm ofrecerá eliminarla.
Expresión de coincidencia
La nueva expresión es similar
switch
pero utiliza una comparación estricta y puede asignarse a una variable o devolverse.
PhpStorm detecta si un bloque se
switch
puede reescribir
match
y lo hará automáticamente con una solución rápida presionando Alt + Enter:
puede ser difícil ver el uso incorrecto de una nueva expresión, por lo que PhpStorm resaltará todos los errores.
Se encontrarán valores duplicados en las condiciones: Una
expresión coincidente con una rama y una rama predeterminada se puede reemplazar de forma segura con una expresión ternaria.
Y si solo queda la rama predeterminada, entonces la coincidencia no es necesaria en absoluto.
Finalmente, si los cuerpos son iguales en diferentes ramas, se pueden fusionar.
Operador de seguridad nula
En lugar de un montón de condiciones con una verificación de nulo, ahora puede usar una cadena de llamadas con un nuevo operador
?->
.
PhpStorm comprobará el uso correcto del operador:
Coma colgante
Ahora está permitido agregar una coma después del último argumento al llamar a funciones y en una lista de cierre
use
.
Capturas no capturadas
En PHP 8, puede detectar una excepción en un bloque de captura sin una variable.
Lanzar expresión
Las excepciones ahora se pueden lanzar en funciones de flecha y operadores cortos
??
, así como en ternario
? :
.
Puede usar taquigrafía
thr
y presionar tabulador; esta es una plantilla en vivo .
Constante :: clase sobre objetos
Anteriormente, para obtener el FQN de un objeto, tenía que usar una función
get_class()
. En PHP 8, la llamada
get_class($object)
se puede reemplazar con seguridad por
$object::class
.
En realidad, al presionar Alt + Enter, se puede realizar dicho reemplazo.
::class
Se resaltará el uso incorrecto de la constante PhpStorm.
Nuevas funciones para cadenas: str_contains (), str_starts_with (), str_ends_with ()
¿Cómo verifico si una cadena contiene una palabra específica? Es la pregunta de PHP más vista en Stack Overflow. PHP 8 tiene una respuesta clara a esta pregunta: use una función
str_contains()
.
PhpStorm 2020.3 todas las llamadas
strpos()
que pueden ser reemplazadas por
str_contains()
:
También hay nuevas
str_starts_with()
, y
str_ends_with()
para determinar si la subcadena específica de la línea inicial o final. PhpStorm destaca dónde las llamadas
substr()
se pueden reemplazar con nuevas alternativas:
Advertencias de motor reclasificado
En PHP 8, el tipo de advertencia lanzada se ha revisado para detectar muchos errores. Es decir, en lugar de Aviso en muchos casos, habrá una excepción o un error de tipo.
En PhpStorm, debido a esto, algunas inspecciones tienen dos niveles de gravedad diferentes: para PHP 8 y para versiones anteriores.
Estos son todos los más notables de PHP 8. Hay un montón de cambios más pequeños que serán visibles cuando actualice a PHP 8.
Soporte de Psalm y PHPStan
Ambos analizadores estáticos se pueden usar en PhpStorm 2020.3 para resaltar problemas directamente en el editor.
Si se agregan PHPStan o Psalm como dependencias en
composer.json
, habrá un icono de llave inglesa junto a ellos que abre la configuración de la herramienta.
Desde allí, puede ir a la configuración de inspección y activar el resaltado en el editor. Esto se hace seleccionando la inspección apropiada en PHP | Herramientas de calidad en Configuración / Preferencias | Editor | Inspecciones .
️ Es mejor encender solo uno de los instrumentos, en lugar de ambos al mismo tiempo.
Aquí también puede especificar la ruta al archivo de configuración y configurar los argumentos de la línea de comando.
️ PHPStan puede funcionar sin un archivo de configuración, pero Psalm lo requiere. Si hay
psalm.xml
o en el directorio raíz
phpstan.neon
, PhpStorm los extraerá automáticamente.
Cuando todo esté configurado, abra cualquier archivo y verá un resaltado de los analizadores estáticos. Puede haber una pequeña demora antes de que aparezca la luz de fondo.
Anotaciones
Todas las anotaciones de salmos
@psalm-*
ahora están resaltadas correctamente en el editor. Pero, en general, ahora puede eliminar de forma segura el prefijo
@psalm-
de las etiquetas, es decir
@psalm-return
->
@return
y
@psalm-param
->
@param
.
Soporte de tipo
Agregamos soporte para algunos tipos de Salmos y, en base a la información de las etiquetas, mejoramos nuestra inferencia de tipos. Esto hizo que las comprobaciones, la generación de código y el autocompletado fueran más precisos.
Pseudo-tipos Se
admiten los pseudo-tipos de Salmo, como escalares, numéricos, etc.
Constantes en tipos
Soporta concatenación constante e indicación a través
*
de etiquetasparam y var...
Typehints para matrices También se admiten
descripciones de matrices
array<array-key, Type>
, incluidas las anidadas.
Genéricos y @tempate El
soporte genérico es una función para usuarios avanzados que no tiene una especificación correcta completa y muchos casos extremos . Sin embargo, decidimos implementar soporte básico para
@template
la sintaxis basada en Salmos para ver cómo se usará.
Hasta ahora, solo se admite el caso más primitivo, cuando la función devuelve uno de sus parámetros.
Este soporte genérico es muy básico y experimental. Queremos entender cómo se utilizará y qué se debe implementar primero. Nos encantaría saber de usted, especialmente en forma de casos de uso reales en nuestro rastreador .
Xdebug 3
El popular depurador de PHP se ha actualizado para que sea mucho más rápido y fácil de configurar. Lea más sobre Xdebug 3 en la guía de actualización .
Para configurar Xdebug 3, una opción xdebug.mode ahora es suficiente (como esta
XDEBUG_MODE=debug
).
Además, se ha cambiado el puerto Xdebug predeterminado: en lugar de
9000
ahora
9003
. Para simplificar la migración, PhpStorm escucha en ambos puertos de forma predeterminada. La configuración del puerto y otras opciones para Xdebug se encuentran en Preferencias / Configuración | Idiomas y marcos | PHP | Depurar .
Mejoras en el depurador
Las capacidades de depuración en PhpStorm se han ampliado con dos nuevas funciones.
Sugerencias interactivas
Ahora, en modo de depuración, puede expandir la salida de variables para ver todos los campos. También puede cambiar los valores allí mismo.
Relojes en línea
En versiones anteriores, podía agregar una variable o expresión a la lista de observación y observar el cambio de valor paso a paso.
En PhpStorm 2020.3, puede agregar relojes directamente en el contexto, y se mostrarán junto al código.
Haga clic en Agregar como reloj en línea en la ventana emergente de la sugerencia.
O haga clic en Agregar reloj en línea en el menú contextual del editor.
O seleccione la variable y seleccione Agregar reloj en línea en el menú contextual .
Resaltado y cambio de nombre de variables en Twig
Seleccione una variable o coloque el cursor sobre ella y se resaltarán todos sus usos en la plantilla. Y para cambiar el nombre de todas las apariciones, presione Mayús + F6.
Co-desarrollo - Code With Me
PhpStorm 2020.3 viene con el complemento Code With Me , el nuevo desarrollo colaborativo JetBrains y la nueva herramienta de programación de pares. Con él, puede compartir un proyecto abierto con otros usuarios y trabajar juntos en él en tiempo real. Lea más sobre Code With Me en estas publicaciones .
Cliente HTTP
Integrando Guzzle con HTTP Client en PhpStorm
Guzzle es uno de los clientes HTTP más populares para PHP. Imagine que en algún lugar del código hay una solicitud HTTP y desea probarla sin ejecutar el código en sí. Anteriormente, tendría que copiar todos los parámetros manualmente.
PhpStorm 2020.3 le permite convertir solicitudes simples de Guzzle a archivos .http. Si la solicitud es compatible, aparecerá un icono junto a ella. Al hacer clic en él, abrirá un nuevo archivo borrador con la URL correcta, los parámetros de solicitud, los métodos, los encabezados y el cuerpo.
Ahora, desde el editor, la consulta puede ejecutarse y manipularse, y luego guardarse como un archivo http en el proyecto.
Más sobre el cliente HTTP en la revisión del video .
Copiar la solicitud HTTP a cURL
Para exportar la solicitud HTTP a una cadena cURL, presione Alt + Entrar en la solicitud en el editor y seleccione Convertir a cURL y copiar al portapapeles . Ahora se puede pegar en la terminal, la documentación o cualquier herramienta de prueba de API.
Editor
Mejoras para Markdown
Puede usar la sintaxis Mermaid.js en archivos de rebajas para describir tablas y gráficos . PhpStorm ahora puede generar vistas previas para ellos directamente en el editor. Incluido en Preferencias / Configuración | Idiomas y marcos | Markdown .
Ahora también es posible reformatear el contenido de los archivos .md de acuerdo con los estilos populares. Hecho presionando ⌘⌥L / Ctrl + Alt + L.
Configurable en Preferencias / Configuración | Editor | Estilo de código | Markdown .
Finalmente, si hace clic en el botón Vista previa de desplazamiento automático en la esquina superior derecha del editor, el desplazamiento de la vista previa y el texto se sincronizarán.
Revisión ortográfica y gramatical mejorada
Los errores tipográficos y gramaticales ahora se pueden corregir mucho más rápido:
- Primero, aparecerá una explicación del error en una ventana emergente.
- Y si presiona Alt + Enter en el texto resaltado, las opciones de reemplazo se ofrecerán en la parte superior y no se ocultarán en un subelemento, como antes.
Editor dividido arrastrando y soltando
Para abrir varios archivos uno al lado del otro, simplemente arrastre la pestaña a la esquina deseada de la pantalla.
Hay otra forma de abrir un archivo en modo dividido: Shift + Enter.
Se puede hacer clic en la combinación en el archivo seleccionado en la vista Proyecto o en los resultados de búsqueda de archivos.
Pestaña de vista previa
Si necesita ver rápidamente los archivos, ahora no es necesario abrir cada uno en una pestaña separada. Puede utilizar la nueva pestaña Vista previa .
Para habilitarlo, haga clic en el engranaje en la vista Proyecto y seleccione Habilitar pestaña Vista previa y Abrir archivos con un solo clic .
También puede ver archivos presionando la barra espaciadora en la vista Proyecto sin abrirlos.
IDE
Mejoras para la búsqueda en todas partes
Los resultados están agrupados por relevancia:
puede realizar operaciones matemáticas simples sin abrir la calculadora de
puede buscar por historial de Git:
Cambio automático a tema claro u oscuro
En Preferencias / Configuración | Apariencia y comportamiento | Apariencia | Tema seleccione Sincronizar con el sistema operativo .
Nuevo conjunto de teclas de acceso rápido para macOS
Un diseño alternativo de atajos de teclado para macOS minimiza el uso de teclas de función para que no tenga que estirar la mano por todo el teclado al realizar acciones básicas. Por ejemplo, en lugar de Fn + Shift + F6, la refactorización Rename usa ⌥ + ⌘ + R.
Palabras en lugar de iconos para teclas de acceso rápido de macOS
Puede hacer que aparezcan las palabras Alt, Cmd, etc. en lugar de iconos como ⌘ . Habilitado
en la sección Registro mediante la opción ide.macos.disable.native.shortcut.symbols . Para acceder al registro, use Buscar acción Cmd + Shift + A y escriba Registro allí .
Configure PhpStorm como aplicación predeterminada para diferentes archivos
Las preferencias | Configuración / Editor / Tipos de archivo haga clic en Asociar tipos de archivo con PhpStorm… . En el cuadro de diálogo, seleccione las extensiones de archivo y se abrirán en PhpStorm.
Se requiere reiniciar en macOS.
Las plantillas pueden generar varios archivos
Puede generar simultáneamente varios archivos a la vez, por ejemplo, un esqueleto para un módulo o una vista de controlador combinada.
En Preferencias / Configuración | Editor | Haga clic en Plantillas de archivo y código
Se pueden utilizar variables de tipo en el campo Nombre de archivo
${NAME}
.
Y aquí hay un ejemplo de cómo generar un controlador y una plantilla en Symfony:
Soporte de escenario Git
Puede habilitarlo marcando la casilla de verificación Habilitar área de ensayo en Preferencias / Configuración | Control de versiones | Git .
En la ventana de la herramienta Confirmar (Cmd + 0 / Alt + 0), aparecerán dos grupos de archivos: en etapas y sin etapas.
Para agregar un archivo en etapas , haga clic en el signo + junto a él.
O puede seleccionar líneas específicas y agregarlas con un icono en el editor. En este caso, puede confirmar algunos de los cambios del archivo y continuar trabajando en el resto.
Herramientas DB
PhpStorm incluye funciones de DataGrip listas para usar , que se tratan en la descripción general de la versión DataGrip 2020.3 de nuestros colegas.
SQL para MongoDB
Ahora puede usar consultas SQL contra MongoDB. PhpStorm 2020.3 soportes
SELECT-
consultas
JOIN
,
WHERE
,
GROUP BY
,
HAVING
,
ORDER BY
,
LIMIT
,
OFFSET
y todas las características de MongoDB aparte mapa, reducir, filtrar y permiten. Lea más en la publicación del blog .
Web
Como siempre, PhpStorm incluye todas las actualizaciones de WebStorm 2020.3 . Lo más notable es el soporte para Tailwind CSS.
Tailwind CSS
PhpStorm complementa las clases Tailwind en archivos HTML y después de la directiva @apply. También proporcionará finalización de pseudoclase.
Si pasa el cursor sobre una clase en archivos HTML y CSS, se muestra una vista previa del CSS resultante. La vista previa también está disponible durante la finalización del código, en la ventana emergente de documentación F1 / Ctrl + Q.
PhpStorm admite personalizaciones de tailwind.config.js. Por ejemplo, si define un tema con nuevos colores, en la ventana emergente de autocompletar se crearán clases con el nombre del color personalizado.
Puede descargar PhpStorm 2020.3 en la página " Novedades ".
Y aquí hay un video (en inglés) que muestra las principales características del lanzamiento:
Eso es todo este tiempo. Estaremos encantados de tener preguntas, deseos, informes de errores y pensamientos en los comentarios.