Resumen de noticias de PHP y Laravel para agosto de 2024 / Sudo Null IT News

¡Hola a todos!

Este es un resumen de noticias de Código de corte. Echemos un vistazo a lo que sucedió durante el último mes en el mundo de PHP y Laravel.

Noticias PHP

Las primeras versiones beta de PHP 8.4 están disponibles para pruebas

Se han lanzado las dos primeras versiones beta de PHP 8.4.

La congelación de funciones tuvo lugar el 13 de agosto, lo que significa que todos los RFC que aún no hayan completado la votación se dirigirán a la próxima versión de PHP.

Antes del lanzamiento final, que se espera para el 21 de noviembre, tendremos 1 versión beta más y 4 lanzamientos candidatos.

PHP 8.2.23 y PHP 8.3.11 lanzados

Las versiones de corrección de errores se publicaron según lo programado.

Encuesta del estado de Laravel 2024

Tobias Petry ha lanzado una encuesta anual sobre el estado de la comunidad Laravel. Las ediciones del año pasado también están disponibles en el sitio. resultados de la encuesta.

Estado de los genéricos y las colecciones

Arnaud Le Blanc, Derick Rethans y Larry Garfield hablaron sobre el estado actual de los genéricos en PHP.

Puedes participar en el debate en lista de correo y en Reddit.

PhpStorm 2024.2 lanzado

En esta versión encontrará soporte para archivos de registro, edición desde una barra de herramientas flotante, autocompletado en la nueva terminal, autocompletado mejorado de líneas completas y mucho más.

La lista completa de cambios se puede encontrar en el sitio web de JetBrains.

Equipo PHP de Podlodka

Del 30 de septiembre al 4 de octubre se celebrará Podlodka PHP Crew, una conferencia de una semana de duración con expertos de las principales empresas.

Te esperan sesiones en Zoom, comunidad en Telegram y un ambiente divertido.

PHP Rusia 2024

Los días 2 y 3 de diciembre se celebrará en Moscú la conferencia Highload, durante la cual se dedicarán 16 informes a PHP Rusia.

Noticias principales de PHP

La mayoría de las noticias principales de PHP se tratan en detalle en la serie. Resumen del núcleo de PHP de la Fundación PHP, los repasaremos rápidamente:

RFC: clase estática

El RFC no recibió el porcentaje requerido de votos y fue rechazado.

RFC: Objetos perezosos

PHP 8.4 introducirá objetos diferidos. Estos objetos solo se inicializarán y consumirán recursos cuando se lea o modifique una propiedad.

Si bien la mayoría de los usuarios no utilizan directamente los objetos diferidos, están destinados principalmente a autores de bibliotecas y marcos, lo que les permite eliminar una gran cantidad de código repetitivo.

RFC: Mejorar la coherencia del lenguaje para el comportamiento de compensaciones y contenedores

PHP admite el acceso a elementos del contenedor mediante desplazamiento usando paréntesis () con la siguiente notación $contenedor($offset). Sin embargo, el comportamiento de dichas llamadas depende no sólo del tipo de contenedor y del desplazamiento, sino también de la operación que se realiza cuando se accede al desplazamiento. El comportamiento actual es muy inconsistente y difícil de predecir.

Gina Peter Banyard sugiere mejorar la coherencia del lenguaje para compensaciones y contenedores.

RFC: Agregar bcdivmod a BCMath

PHP actualmente tiene una función bcdiv() para dividir números de precisión arbitrarios y una función bcmod() para obtener el resto después de la división.

PHP 8.4 introducirá una nueva función bcdivmod() que le permite obtener el cociente y el resto en una operación como una matriz.

RFC: mejoras en el gancho de propiedad

Después de implementar enlaces de propiedades, Ilija Tovilo y Larry Garfield encontraron una manera de refactorizar la lógica para mejorar el rendimiento. El RFC pasó la etapa de votación y obtendremos mejoras en los enlaces en PHP 8.4.

RFC: Visibilidad Asimétrica v2

En el segundo intento, el RFC fue aceptado. En PHP 8.4 aparecerá una sintaxis tipo Swift que permite que las propiedades tengan visibilidad separada (“asimétrica”) para operaciones de lectura y escritura.

RFC: Función Autocarga v4

Al utilizar cargadores automáticos (como Composer), los usuarios ya pueden familiarizarse rápidamente con las clases, pero el lenguaje actualmente no tiene la capacidad de hacer lo mismo con las funciones. Robert Landers sugirió agregar la capacidad de cargar funciones automáticamente.

RFC: ¿PHP debería tener una directiva que haga que el analizador trate todas las llamadas a funciones con espacios de nombres como globales?

Al llamar a funciones desde el espacio de nombres global, el analizador PHP crea códigos de operación que utilizan esas funciones directamente. El analizador puede utilizar códigos de operación especiales optimizados para llamar a determinadas funciones integradas.

Nick Lockheart pide una discusión sobre si PHP debería tener una directiva que obligue al analizador a tratar todas las llamadas a funciones desde un espacio de nombres como globales.

RFC: expresión predeterminada

La única forma de pasar un valor predeterminado a un parámetro de función o método es no pasar nada. Paul Morris sugiere introducir una expresión predeterminada en contextos de paso de argumentos para usar el valor predeterminado de una función o método.

function greetingEveryone($greeting = 'Hello', $subject="World") {
    return sprintf('%s, %s!', $greeting, $subject);
}

var_dump(greetingEveryone(default, default)); // Hello, World!

resumen de laravel

Actualizaciones de Laravel

19.11. Agregue el método dondeNone al generador de consultas

https://github.com/laravel/framework/pull/52260

PR que afecta a QueryBuilder. Se agregó un nuevo método donde Ninguno. Anteriormente ya teníamos los métodos WhereAny y WhereAll, y ahora también tenemos WhereNone. Si echamos un vistazo a los cambios, podemos ver que básicamente estamos usando el mismo método WhereAny, pero agregando una negación lógica a la variable. A continuación volvemos al ejemplo: vemos que tenemos un conjunto de campos, un operador, valores y una construcción final, que se agrupa en la construcción NOT.

$users = DB::table('users')
            ->where('active', true)
            ->whereNone((
                'first_name',
                'last_name',
                'email',
            ), 'LIKE', 'einar%')
            ->get();
SELECT *
FROM users
WHERE active = true AND NOT (
    first_name LIKE 'einar%' OR
    last_name LIKE 'einar%' OR
    email LIKE 'einar%'
)

19.11. Métodos de prueba afirmarSeeHtml, afirmarDontSeeHtml y afirmarSeeHtmlInOrder

https://github.com/laravel/framework/pull/52285

PR que afecta las pruebas y agrega nuevos métodos. El autor de relaciones públicas señala que cuando se prueban componentes LiveWire existen afirmarSeeHtml y otros métodos. Le sorprendió que el rasgo de prueba de Laravel en sí no incluyera estos métodos. De hecho, no había ninguno, porque todo lo que había que hacer para reproducir estos métodos era usar afirmarVer con un segundo parámetro que indicaba que Escape es falso. Así que supongo que nadie necesitaba ese tipo de azúcar, pero ahora está ahí y la opción Escape false se configurará automáticamente.

$response->assertSeeHtml('<li>foo</li>');
$response->assertSeeHtmlInOrder(('<li>foo</li>', '<li>bar</li>', '<li>baz</li>'));
$response->assertDontSeeHtml('<li>foo</li>');

Como resultado, podremos probar HTML sin escapar y sin algunos caracteres de código adicionales.

19.11. Agregar el método afirmarExactJsonStructure

https://github.com/laravel/framework/pull/52311

El próximo PR también cubre las pruebas. Esta vez se trata de probar las respuestas de la API y comprobamos si la estructura JSON coincide exactamente con la que especificamos. Es decir, sólo comprobamos la estructura sin valores.

{
    "data": {
        "id": 1,
        "firstname": "Taylor",
        "lastname": "Otwell"
    }
}

En este caso, en el ejemplo vemos que tenemos este JSON: id, firstname, lastname.

Esta prueba fallará porque no especificamos que la estructura también contenga un ID.

// This fails
$response->assertExactJsonStructure((
    'data' => (
        'firstname',
        'lastname',
    ),
));

Después de especificar este parámetro, la prueba se volverá verde.

// This succeeds
$response->assertExactJsonStructure((
    'data' => (
        'id',
        'firstname',
        'lastname',
    ),
));

19.11. Agregar el método de prueba withoutHeader()

https://github.com/laravel/framework/pull/52309

Todavía probando, trabajando con solicitud. Antes de esto teníamos un método withHeader para agregar encabezados específicos.

$this->withHeader('Foo', 'bar')->get(...);

Pero resultó que no existía sin encabezado. Ahora sí, este PR cierra esta tarea.

$this->withoutHeader('Foo')->get(...);

11.20. Agregar colapsoWithKeys a la colección

https://github.com/laravel/framework/pull/52347

PR afecta las colecciones y agrega un nuevo método collapseWithKeys. Antes de esto teníamos métodos flatten Y collapseque hizo frente a su tarea, pero no guardó las claves. Ahora este método hará lo mismo, pero las claves se guardarán. Como podemos ver en el ejemplo, la matriz (colección) antes y el resultado después de aplicar el método, mientras se guardan las claves.

((1 => 'a'), (3 => 'c'), (2 => 'b')) // before
(1 => 'a', 3 => 'c', 2 => 'b')       // after

11.20. Agregar deduplicado a cadenas

https://github.com/laravel/framework/pull/52350

La solicitud de extracción afecta a los asistentes de cadena y agrega un nuevo método deduplicate. En la solicitud de extracción se llamó originalmente diduppero finalmente se le cambió el nombre a deduplicate. Este es un método auxiliar muy útil, definitivamente lo usaré. Elimina duplicados de la cadena especificada. Indicamos qué carácter buscamos duplicados, y si aparece más de una vez, se eliminarán todos los duplicados.

Ejemplo: si hay varias barras dobles seguidas, solo quedará una:

Str::dedup('/some//odd/path//', '/'); // '/some/odd/path/'
Str::dedup('zondaaaa', 'a');          // 'zonda'

11.20. Introduzca MixFileNotFoundException para manejar archivos Mix faltantes

https://github.com/laravel/framework/pull/52400

Si no tenemos archivos mixtos, entonces ha aparecido una nueva excepción para este caso: MixFileNotFoundException. En mi opinión esto es mejor que runtime.exception.

11.20. Crear notificación, crear marcador de posición de nombre de reducción de comando de Notif…

https://github.com/laravel/framework/pull/52465

El comando de la consola para crear una notificación recibió varias entradas interactivas nuevas. La pregunta es si es necesario crear una vista para Markdown y, en consecuencia, cómo se llamará esta vista.

11.20. hazaña: hacer pública Fachada::isFake()

https://github.com/laravel/framework/pull/52357

Las fachadas pueden ser falsas, pero dentro de la fachada había un método contra la falsificación que estaba protegida. Ahora lo tenemos público y podemos comprobar si la fachada está en estado falso o no.

21.11. Ansiosas estrategias de captación previa de activos para Vite

https://github.com/laravel/framework/pull/52462

Actualización como parte de la versión 11.21 de Tim MacDonald. Las relaciones públicas afectan la fachada de Vite e influyen en la estrategia de captación previa de nuestros activos. De forma predeterminada, Vite en Laravel simplemente incluye activos CSS y JS, declarados en su totalidad. Tim MacDonald agregó dos nuevas estrategias de captación previa: cascada y agresiva.

Si observamos los cambios, veremos nuevos métodos en la fachada de Vite. La salida de activos en HTML solía estar en una línea, ahora nos enfrentamos a una lógica enorme en la que no solo tomamos activos declarados, sino que tomamos partes del manifiesto. Vite simplemente sabe cómo dividir el código: dividimos todo en componentes separados, los revisamos y les adjuntamos captación previa, agregamos JS sobre cómo cargaremos gradualmente estos activos, indicando la cantidad de solicitudes competitivas, etc. En general, un PR muy interesante y en general en la descripción vemos mucha información sobre cómo se ve la misma carga de activos en Tailwind cuando nos desplazamos por el menú. Pasamos el cursor por A-link y cargamos gradualmente más recursos. Esta estrategia es perfecta para sitios estáticos.

Versión en vídeo del resumen:

Publicaciones Similares

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *