PHP 8.5 explicado: pipe, clone, arrays y URI
PHP 8.5 se publicó el 20 de noviembre de 2025. Novedades con ejemplos y controles antes de actualizar.
PHP 8.5 se publicó el 20 de noviembre de 2025. Novedades con ejemplos y controles antes de actualizar.
Versión y compatibilidad
PHP 8.5 salió el 20 de noviembre de 2025. Pasar de 8.4 a 8.5 cambia la versión menor, no la primera cifra. Antes de actualizar producción, comprueba framework, extensiones y alojamiento, lee la guía de migración y prueba código y plugins en staging con copia de seguridad y plan de reversión.
Operador pipe
|> pasa un valor por funciones invocables de izquierda a derecha. trim(...) y strtolower(...) son callables de primera clase; la función anónima recibe el resultado anterior. A la derecha debe haber un callable, no cualquier expresión. Así se leen mejor transformaciones sucesivas.
<?php
$title = ' PHP 8.5 Released ';
$slug = $title |> trim(...) |> (fn($s) => str_replace(' ', '-', $s)) |> strtolower(...);
var_dump($slug); // string(16) "php-8.5-released"
Clonar cambiando propiedades
clone($objeto, ['propiedad' => valor]) crea una copia y asigna propiedades durante la clonación, incluso en clases readonly. En el ejemplo cambia alpha solo en la copia. Una asignación posterior a un clon normal no puede reescribir una propiedad readonly ya inicializada.
<?php
readonly class Color {
public function __construct(public int $red, public int $alpha = 255) {}
public function withAlpha(int $alpha): self {
return clone($this, ['alpha' => $alpha]);
}
}
$original = new Color(79);
$copy = $original->withAlpha(128);
Primer y último valor
array_first() y array_last() devuelven valores según el orden del array, no las claves menor y mayor. Un array vacío devuelve null; si null puede ser un dato, comprueba aparte si está vacío. No mueven el puntero interno como reset() y end().
<?php
$items = ['first', 'middle', 'last'];
var_dump(array_first($items)); // "first"
var_dump(array_last($items)); // "last"
var_dump(array_first([])); // null
Extensión URI
Uri\Rfc3986\Uri interpreta según RFC 3986; PHP 8.5 también ofrece el modelo URL WHATWG. Elige según el caso. La extensión no reemplaza automáticamente bibliotecas externas, validación de URL, control de hosts ni seguridad de peticiones remotas.
<?php
use Uri\Rfc3986\Uri;
$uri = new Uri('https://example.com/path?q=1');
var_dump($uri->getHost()); // "example.com"
Deprecaciones y actualización
Los casts (boolean), (integer), (double), (binary) están obsoletos; usa (bool), (int), (float), (string). También los backticks como alias de shell_exec(). shell_exec() deja clara la intención, pero no protege de datos no confiables. Evita shell cuando puedas y no concatènes entradas externas. Consulta advertencias y cambios de la guía.
Fuentes oficiales
Anuncio: https://www.php.net/releases/8.5/en.php ; funciones: https://www.php.net/manual/en/migration85.new-functions.php ; deprecaciones: https://www.php.net/manual/en/migration85.deprecated.php ; migración: https://www.php.net/manual/en/migration85.php .
Compartir
¿Cuál es tu reacción?
Me gusta
0
No me gusta
0
Me encanta
0
Divertido
0
Enfadado
0
Triste
0
¡Vaya!
0