2 puntos por GN⁺ 2025-11-21 | 1 comentarios | Compartir por WhatsApp
  • PHP 8.5 es una actualización importante que incluye varias funciones como el operador pipe, clone with y un nuevo analizador de URI
  • El operador pipe simplifica las cadenas de llamadas a funciones, mejorando la legibilidad y el mantenimiento
  • La función Clone with permite modificar valores de propiedades al mismo tiempo que se clona un objeto, aunque existen restricciones para algunas propiedades readonly
  • Se refuerzan las mejoras para desarrolladores con #[NoDiscard], el cast (void), soporte de expresiones constantes para closures y salida de backtrace en fatal errors
  • La versión incluye mejoras de detalle en manejo de arreglos, validación de atributos y eliminación de casts no estándar, además de cambios relacionados con compatibilidad hacia atrás

Principales funciones nuevas

  • Con la incorporación del operador pipe (|>) ahora es posible escribir código en cadena pasando directamente el resultado de una función a la siguiente

    • Permite una estructura para transformar datos paso a paso en lugar de usar llamadas anidadas
    • En el código de ejemplo se conectan secuencialmente trim, str_replace, strtolower y otras funciones
  • La función Clone with permite cambiar valores de propiedades al clonar un objeto

    • En la clase de ejemplo Book, se usa con la forma clone($this, ['title' => $title])
    • Sin embargo, al clonar propiedades readonly desde fuera, se requiere el especificador de acceso public(set)
  • Se agregan el atributo #[NoDiscard] y el cast (void)

    • Es posible marcar funciones para que generen una advertencia si se ignora el valor de retorno
    • El cast (void) permite suprimir esa advertencia
  • Con las mejoras en closures, ahora se pueden usar closures y first-class callable objects dentro de expresiones constantes

    • En el ejemplo se definen dentro de un atributo con la forma #[SkipDiscovery(static function (...))]
    • Estas closures deben declararse obligatoriamente como static y no pueden acceder a variables externas
  • Se añade la salida de backtrace en fatal errors

    • La información de rastreo de pila que antes no se mostraba ahora se incluye en el mensaje de error, facilitando la depuración

Funciones relacionadas con arreglos y URI

  • Se agregan las funciones array_first() y array_last()

    • Devuelven de forma simple el primer y el último elemento de un arreglo
    • Sustituyen el enfoque más complejo basado en array_key_first() y array_key_last()
  • Se incorpora un nuevo analizador de URI

    • La clase Uri\Rfc3986\Uri ofrece métodos como getHost(), getScheme(), getPort() y otros
    • Simplifica la manipulación y el análisis de URI

Funciones relacionadas con atributos y validación

  • Se incorpora el atributo #[DelayedTargetValidation]
    • Permite posponer de tiempo de compilación a tiempo de ejecución la validación de algunos atributos, como #[Override]
    • Su objetivo es aliviar problemas de compatibilidad hacia atrás

Otros cambios menores

  • Soporte para visibilidad asimétrica (asymmetric visibility) en propiedades estáticas
  • Ahora también se pueden asignar atributos a constantes fuera de clases
  • La promoción de propiedades en el constructor (property promotion) ahora también puede aplicarse a propiedades final
  • El atributo #[\Override] ahora también puede aplicarse a propiedades
  • Se agrega la propiedad Dom\Element::$outerHTML
  • La extensión Exif añade soporte para imágenes HEIF/HEIC
  • Se agrega la bandera FILTER_THROW_ON_FAILURE al llamar a filter_var()

Eliminaciones y cambios incompatibles

  • Se deja de admitir el uso de nombres de cast no estándar como (boolean) e (integer)
  • Se depreca el uso de backticks (```) como alias de shell_exec()
  • Se depreca la función de redefinir constantes
  • Se elimina la configuración ini disabled_classes
  • La lista completa de cambios y deprecaciones puede consultarse en la documentación de actualización de PHP 8.5

Resumen general

  • PHP 8.5 es una versión que mejora la experiencia de desarrollo en general, incluyendo legibilidad del código, depuración, manejo de atributos y manipulación de arreglos
  • El operador pipe y el analizador de URI tienen un impacto directo en la simplificación del código real de trabajo
  • El retraso en la validación de atributos, las nuevas funciones de arreglos y la salida de backtrace aumentan la mantenibilidad y la estabilidad
  • Algunas sintaxis y configuraciones no estándar quedan deprecadas, por lo que será necesario ajustar el código
  • En conjunto, es un lanzamiento centrado en reforzar la consistencia del lenguaje y mejorar la comodidad para desarrolladores

1 comentarios

 
GN⁺ 2025-11-21
Comentarios de Hacker News
  • Sigo amando PHP
    Hace 23 años hice software de cifrado para PHP y todavía funciona bien
    Aún llevo un boletín sobre PHP y la comunidad sigue siendo fuerte
    También uso Python y Node.js, pero para tareas rápidas y simples siempre termino volviendo a PHP
    Aun así, que PHP se haya vuelto mucho más complejo desde PHP 5 me parece un arma de doble filo

    • Creo que PHP es un caso ejemplar de una gran transición bien hecha
      Mientras Python pasaba de 2 a 3, PHP evolucionó de 5.2→5.3 y de 5.6→7.0
      Con namespaces, autoloading PSR0 y mejoras del parser, la velocidad y la estructura mejoraron mucho
      En cada actualización fue mejorando gradualmente sin romper compatibilidad, y además ofreció advertencias y shims para poder mantener versiones antiguas
      PHP 6 se canceló por los cambios en el manejo de cadenas, y al final me parece que fue una decisión acertada
      Fue un proyecto que respetó al lenguaje y a la comunidad que durante mucho tiempo le dio de comer a mucha gente
    • Mucha gente dice que PHP se volvió complejo, pero el código simple que hice en 5.3 sigue funcionando perfectamente en PHP 8
      Puedes usarlo de forma compleja, pero no es obligatorio
    • Me pregunto si ese software de cifrado era Zend
      A mediados de los 2000 trabajé con herramientas relacionadas con Zend y recuerdo que eran bastante complicadas
    • PHP 8 es bastante fácil de entender si lo aprendes bien desde el principio
      Si aprendes PSR y tienes en cuenta la seguridad y las capacidades modernas, se ha vuelto un lenguaje mucho más estable y potente
  • La evolución desde PHP 5 ha sido impresionante, pero eso también ha traído el problema de una mayor complejidad
    Para quienes aprendieron con versiones antiguas, los codebases actuales se sienten ajenos y difíciles de seguir
    Eso es una fortaleza para la comunidad, pero una barrera para desarrolladores que quieren volver

    • Creo que el PHP moderno sigue siendo un lenguaje muy legible
      Usé C++ durante 10 años, pero ahora PHP me resulta mucho más fácil de leer que el código moderno de C++
    • Basta con aprender PHP 8. El PHP de hoy es muchísimo mejor que antes
    • Hoy en día la mayoría del software sufre un problema parecido
      Da la impresión de que el objetivo de la simplicidad desapareció y solo se siguen acumulando funciones
    • En realidad este cambio también pasa en otros lenguajes
      El mundo web cambia especialmente rápido, así que si no te mantienes al día te quedas atrás
    • Trabajo como especialista en Java y aun así muchas veces tengo que explicarles funciones nuevas a mis colegas
      PHP es un lenguaje que muchos principiantes usan para hacer su primer sitio web, así que quizá el cambio se siente más fuerte que en otros lenguajes
  • Mucha gente tiende a avergonzarse de PHP, pero yo no
    No sé tanto del lenguaje, pero sí sé que hay muchos proyectos geniales
    Mi proyecto favorito de PHP estos días es BookStack, que uso como wiki familiar
    Sigue habiendo muchos sitios hechos con stacks de PHP bien mantenidos

    • El PHP moderno es un lenguaje rápido y excelente
      Usé PHP en producción entre 2021 y 2023, y más que el lenguaje, el problema eran los codebases viejos y los salarios bajos
      Hay mucho código heredado de la época de PHP 4 y los patrones de acceso a datos varían por todos lados, así que el mantenimiento es duro
      Pero al migrar a PHP 8, la calidad del código mejoró muchísimo
      Si empezara un proyecto nuevo, no elegiría PHP, pero si fuera un proyecto moderno en Laravel, me sumaría con gusto
    • PHP era un lenguaje intuitivo y divertido de usar
      Pero a los principiantes les resultaba fácil usarlo sin conceptos de seguridad, así que abundaban problemas como la inyección SQL, y por eso se ganó la fama de ser un lenguaje inseguro
    • Prefiero un backend en PHP antes que JS/TS + frameworks modernos
      Con un framework como Laravel, es un entorno mucho más estable y maduro
    • He construido mi carrera con PHP y todavía disfruto su proceso de modernización
      Como tocar guitarra o escribir poesía, cualquiera puede hacerlo, pero hacerlo bien es difícil
    • Me gusta AzuraCast
      Aprendo mirando el código y disfruto autoalojar un servidor de radio/música
  • PHP se ha vuelto un lenguaje cada vez más complejo con cada actualización
    Sigue siendo un lenguaje centrado en la web, así que me pregunto por qué evoluciona de esta forma

    • C# y Java también se han vuelto complejos por estar centrados en backends web
      Al final parece que los lenguajes orientados a objetos tradicionales convergen hacia una dirección parecida
    • La web misma ya no es algo simple
    • También existen proyectos como NativePhp
      Aunque fuera un lenguaje solo para la web, igual tendría razones de sobra para evolucionar. Mejorar la experiencia del desarrollador siempre vale la pena
    • Al principio critiqué sin leer el artículo, pero al revisarlo de nuevo, algunas funciones sí se ven bien
      array_first(), array_last() son útiles, pero el operador pipe podría perjudicar la mantenibilidad
      Como solo admite funciones unarias, en funciones complejas podría incluso provocar más bugs
  • Lo más interesante del anuncio de PHP 8.5 es la estabilidad y madurez del lenguaje

  • Sorprende que PHP vaya a añadir array_first, array_last y fatal error stack trace antes que GTA6

    • Son buenas incorporaciones, pero en realidad con array_shift o array_pop ya alcanzaba
  • Que se sigan añadiendo nuevas funciones y sintaxis a PHP aumenta a largo plazo el costo de mantenimiento
    Si miras las notas oficiales de lanzamiento, el valor de algunas funciones es discutible

    • La extensión URI es rápida, pero se superpone con parse_url()
    • El operador pipe es cuestión de gustos y puede perjudicar la consistencia del estilo de código
    • La mejora de clone es un cambio menor
    • #Discard/void reemplaza funciones de analizadores estáticos
    • Los closures dentro de constantes son interesantes, pero pueden llevar a atributos (#attribute) más complejos
    • Los handles persistentes de cURL sí son una mejora real de rendimiento
    • array_first() está al nivel de azúcar sintáctica y probablemente casi no se usará en proyectos grandes
  • Notas oficiales de lanzamiento de PHP 8.5

  • Los ejemplos del operador pipe en la mayoría de lenguajes simplemente omiten la forma habitual de usar variables temporales
    El ejemplo de parseo de URL tampoco se comparó directamente con parse_url()

    • parse_url() no sigue completamente el estándar y maneja mal las URLs relativas
      La nueva función uri() es más limpia, y si se añade soporte para aplicación parcial de funciones, las cadenas con pipe serán más legibles
  • Solía llamar a **shell_exec() con backticks ()** en PHP CLI, pero ahora quedó deprecated Usaba mucho cosas como mkdir $dirname`

    • Eso es un antipatrón de seguridad
      Hay riesgo de inyección de metacaracteres del shell, así que conviene usar mkdir() o pcntl_exec() de PHP