{"id":77069,"date":"2024-11-08T14:35:16","date_gmt":"2024-11-08T13:35:16","guid":{"rendered":"https:\/\/kinsta.com\/es\/?p=77069&#038;preview=true&#038;preview_id=77069"},"modified":"2025-11-11T17:36:39","modified_gmt":"2025-11-11T16:36:39","slug":"php-8-4","status":"publish","type":"post","link":"https:\/\/kinsta.com\/es\/blog\/php-8-4\/","title":{"rendered":"PHP 8.4: \u00c9stas son las novedades y mejoras"},"content":{"rendered":"<p>Ya se respira sabor a calabaza, as\u00ed que ha llegado la hora de una nueva versi\u00f3n de <a href=\"https:\/\/kinsta.com\/php\/\">PHP<\/a>, el lenguaje de scripting del lado del servidor que impulsa nuestro CMS favorito, <a href=\"https:\/\/kinsta.com\/wordpress\">WordPress<\/a>. Antes del lanzamiento de la versi\u00f3n 8.4 el 21 de noviembre, los desarrolladores de PHP han presentado numerosas versiones preliminares de la nueva base de c\u00f3digo, incluyendo algunas versiones preliminares desde que se congelaron las funcionalidades en agosto.<\/p>\n<p>Junto con las nuevas funcionalidades, mejoras y deprecaciones, que prevemos en esta \u00e9poca del a\u00f1o, en 2024 se produjeron ajustes en el ciclo de publicaci\u00f3n de PHP, con el fin de las publicaciones de seguridad para todas las versiones que se soportan en la actualidad, sincronizadas con el final del a\u00f1o en lugar de coincidir con la fecha de su lanzamiento GA.<\/p>\n<p>Adem\u00e1s, ese soporte se ampli\u00f3 un a\u00f1o, lo que significa que podr\u00edas estar utilizando PHP 8.4 de forma segura hasta 2028 (con dos a\u00f1os de correcciones de seguridad y errores y dos a\u00f1os s\u00f3lo de correcciones de seguridad).<\/p>\n<p>Aunque puedas pasar m\u00e1s tiempo con PHP 8.4, probablemente quieras enterarte de las novedades de esta versi\u00f3n ahora mismo. As\u00ed que, entremos en materia.<\/p>\n<div><\/div><kinsta-auto-toc heading=\"Table of Contents\" exclude=\"last\" list-style=\"arrow\" selector=\"h2\" count-number=\"-1\"><\/kinsta-auto-toc>\n<h2>Nuevas funcionalidades y mejoras en PHP 8.4<\/h2>\n<p>Las nuevas funcionalidades incluidas en el lanzamiento de <a href=\"https:\/\/kinsta.com\/es\/blog\/php-8-3\/\">PHP 8.3<\/a> del a\u00f1o pasado parecer\u00e1n poco importantes si se comparan con algunas de las novedades de 8.4:<\/p>\n<div><\/div><kinsta-auto-toc list-style=\"disc\" selector=\"h3\" count-number=\"6\" sub-toc=\"true\"><\/kinsta-auto-toc>\n<h3>Property hooks<\/h3>\n<p>Los property hooks (hooks de propiedad) aportan un enfoque totalmente nuevo al manejo de los \u00abgetters\u00bb y \u00absetters\u00bb en la <a href=\"https:\/\/kinsta.com\/es\/blog\/php-oop\/\">programaci\u00f3n orientada a objetos (POO) de PHP<\/a>, permiti\u00e9ndote simplificar la estructura de tus archivos de clase.<\/p>\n<p>Como ejemplo de lo que los hooks de propiedad pueden sustituir, la sencilla clase que aparece a continuaci\u00f3n incluye las propiedades <code>$size<\/code> y <code>$flavor<\/code>. Tienen visibilidad <code>private<\/code> para protegerlas del acceso directo fuera del objeto resultante. Por eso, los m\u00e9todos p\u00fablicos getter y setter median en el acceso a las propiedades:<\/p>\n<pre><code class=\"language-php\">class Coffee\n{\n    private string $size;\n    private string $flavor;\n    public function __construct(string $size, string $flavor) {\n        $this-&gt;size   = $size;\n        $this-&gt;flavor = $flavor;\n    }\n\n    \/\/ \"Setting\" coffee size and flavor\n    public function setSize(string $size): void {\n        $this-&gt;size = $size;\n    }\n    public function setFlavor(string $flavor): void {\n        $this-&gt;flavor = $flavor;\n    }\n\n    \/\/ \"Getting\" coffee size and flavor\n    public function getSize(): string {\n        return $this-&gt;size;\n    }\n    public function getFlavor(): string {\n        return $this-&gt;flavor;\n    }\n} \/\/ End of class\n\n\/\/ Make some coffee\n$coffee = new Coffee('Small', 'Pumpkin Spice');\nprint $coffee-&gt;getSize() . ' ' . $coffee-&gt;getFlavor(); \/\/ Prints \"Small Pumpkin Spice\"\n\n\/\/ Change order\n$coffee-&gt;setSize('Grande');\n$coffee-&gt;setFlavor('Mocha');\nprint $coffee-&gt;getSize() . ' ' . $coffee-&gt;getFlavor(); \/\/ Prints \"Grande Mocha\"<\/code><\/pre>\n<p>O puede que tu clase tenga muchas propiedades, y en lugar de escribir muchos m\u00e9todos getter y setter, utilices los m\u00e9todos m\u00e1gicos <code>_get<\/code> y <code>_set<\/code> de PHP. Incluso podr\u00edas ordenar las cosas en una declaraci\u00f3n <code>switch<\/code> algo desordenada, como el siguiente extracto.<\/p>\n<pre><code class=\"language-php\">\/\/ __set magic method example\npublic function __set(string $key, $value): void \n    switch ($key) {\n        case 'size':\n            $this-&gt;size = $value;\n            break;\n        case 'flavor':\n            $this-&gt;flavor = $value;\n            break;\n        default:\n            throw new InvalidArgumentException('Invalid input');\n        }\n}\n\n\/\/ Later, we can change the coffee order like this:\n$coffee-&gt;size = 'Grande';\n$coffee-&gt;flavor = 'Mocha';<\/code><\/pre>\n<p>Sea cual sea el enfoque que elijas, cuantas m\u00e1s propiedades tengas en tu clase, m\u00e1s lejos estar\u00e1 el c\u00f3digo que las manipula de sus definiciones, que suelen estar al inicio del archivo de la clase. Adem\u00e1s, algunas implementaciones de los m\u00e9todos m\u00e1gicos <code>_get<\/code> y <code>_set<\/code> pueden, de forma inesperada, proporcionar acceso a propiedades privadas o protegidas en tu objeto que no hab\u00edas previsto exponer.<\/p>\n<p>La nueva funcionalidad hooks de propiedad agrupa la funcionalidad getter y setter con las propias propiedades. En el ejemplo de hooks de propiedad que aparece a continuaci\u00f3n, ver\u00e1s que las propiedades <code>$size<\/code> y <code>$flavor<\/code> de la clase Caf\u00e9 ahora son p\u00fablicas. Pero tambi\u00e9n hemos a\u00f1adido una validaci\u00f3n b\u00e1sica a los hooks <code>set<\/code>, diferenci\u00e1ndolos de las asignaciones directas.<\/p>\n<pre><code class=\"language-php\">\/\/ Property definitions at the top of our Coffee class\nclass Coffee\n{\n    public string $flavor {\n        set(string $value) {\n            if (strlen($value) &gt; 16) throw new InvalidArgumentException('Input is too long');\n                $this-&gt;flavor = $value;\n        }\n    }\n\n    public string $size {\n        set(string $value) {\n            if (! in_array($value, array(\u2018Small\u2019, \u2018Grande\u2019))) throw new InvalidArgumentException('Not a valid size');\n                $this-&gt;size = $value;\n        }\n    }\n\n    \/\/ Rest of the Coffee class\n}\n\n\/\/ Define a coffee\n$coffee = new Coffee();\n$coffee-&gt;size = 'Grande';\n$coffee-&gt;flavor = 'Pumpkin spice';<\/code><\/pre>\n<p>Del mismo modo, como puedes ver a continuaci\u00f3n, un hook <code>get<\/code> puede empaquetar funcionalidad en lo que parece ser una referencia ordinaria a una propiedad de un objeto.<\/p>\n<pre><code class=\"language-php\">\/\/ Simplified Coffee class\nclass Coffee\n{\n    public string $flavor {\n        get { \n            return $this-&gt;flavor . ' Spice';\n       }\n    }\n}\n\n\/\/ Create a flavor \n$coffee = new Coffee();\n$coffee-&gt;flavor = 'Pumpkin'; \/\/ Stores the value \"Pumpkin\"\nprint $coffee-&gt;flavor;       \/\/ Prints \"Pumpkin Spice\"<\/code><\/pre>\n<p>A diferencia de los m\u00e9todos m\u00e1gicos de PHP, los hooks de propiedad pueden utilizarse en interfaces y clases abstractas. Un ejemplo de interfaz:<\/p>\n<pre><code class=\"language-php\">interface Coffee\n{\n    public string $size { get; set; }\n    public string $flavor { get; set; }\n}<\/code><\/pre>\n<h3>Visibilidad asim\u00e9trica<\/h3>\n<p>Los m\u00e9todos getter y setter visibles p\u00fablicamente que hemos visto antes representan el enfoque tradicional para acceder a las propiedades privadas y protegidas dentro de sus clases.<\/p>\n<p>Una caracter\u00edstica ingeniosa de PHP 8.4 es la posibilidad de que una propiedad tenga distintos niveles de visibilidad dependiendo del contexto en el que se acceda a ella. As\u00ed, una propiedad puede ser p\u00fablica cuando se lee, pero privada o protegida cuando se establece.<\/p>\n<p>Mira esto:<\/p>\n<pre><code class=\"language-php\">class Coffee\n{\n    public private(set) string $flavor = 'Pumpkin Spice';\n}\n\n$coffee = new Coffee();\nprint $coffee-&gt;flavor;     \/\/ Prints \"Pumpkin Spice\"\n$coffee-&gt;flavor = 'Mocha';  \/\/ Error (visibility)<\/code><\/pre>\n<p>Arriba, la propiedad <code>$flavor<\/code> de la clase es p\u00fablica excepto en un contexto de configuraci\u00f3n. Ya es bastante sencillo, pero la visibilidad asim\u00e9trica tiene incluso un peque\u00f1o atajo:<\/p>\n<pre><code class=\"language-php\">class Coffee\n{\n    \/\/ public is assumed when the context is not setting\n    private(set) string $flavor = 'Pumpkin Spice';\n}<\/code><\/pre>\n<p>Puedes utilizar hooks de propiedad y visibilidad asim\u00e9trica en combinaci\u00f3n para obtener una enorme flexibilidad a la hora de trabajar con propiedades de objetos de distintas visibilidades.<\/p>\n<h3>Encadenar <code>new<\/code> sin par\u00e9ntesis<\/h3>\n<p>Hablando de atajos, para llamar a <code>new<\/code> y encadenar m\u00e9todos sol\u00eda ser necesario colocar su invocaci\u00f3n entre par\u00e9ntesis, as\u00ed:<\/p>\n<pre><code class=\"language-php\">$coffee = (new Coffee())-&gt;getFlavor()-&gt;getSize();<\/code><\/pre>\n<p>PHP 8.4 permite lo siguiente:<\/p>\n<pre><code class=\"language-php\">$coffee = new Coffee()-&gt;getFlavor()-&gt;getSize();<\/code><\/pre>\n<p>Puede parecer un cambio menor, pero eliminar s\u00f3lo dos par\u00e9ntesis hace que sea mucho m\u00e1s f\u00e1cil de leer y depurar.<\/p>\n<h3>Nuevas funcionalidades para encontrar elementos de arrays<\/h3>\n<p>En el apartado \u00ab\u00bfQuieres decir que no pod\u00edamos hacer esto ya?\u00bb, PHP 8.4 introduce la funci\u00f3n <code>array_find()<\/code>, que puede buscar elementos de un array que cumplan las condiciones expresadas en una funci\u00f3n callback. La funci\u00f3n devuelve el valor del primer elemento que coincida con la prueba callback.<\/p>\n<p>La nueva versi\u00f3n incluye otras tres funciones relacionadas:<\/p>\n<ul>\n<li><code>array_find_key()<\/code>: Como <code>array_find()<\/code>, pero el valor devuelto es la clave del elemento coincidente en lugar del valor de los propios elementos.<\/li>\n<li><code>array_all()<\/code>: Devuelve <code>true<\/code> si <em>todos los<\/em> elementos del array que se est\u00e1 comprobando coinciden con la prueba de la llamada de retorno.<\/li>\n<li><code>array_any()<\/code>: Devuelve <code>true<\/code> si <em>al menos uno<\/em> de los elementos de la matriz coincide con la prueba callback.<\/li>\n<\/ul>\n<p>Ten en cuenta que las dos \u00faltimas funciones devuelven indicadores booleanos en lugar de claves o contenido del array.<\/p>\n<p>Aqu\u00ed tienes algunos ejemplos r\u00e1pidos:<\/p>\n<pre><code class=\"language-php\">$array = [\n    'a' =&gt; 'Mocha',\n    'b' =&gt; 'Caramel',\n    'c' =&gt; 'Maple',\n    'd' =&gt; 'Pumpkin'\n   ];\n\n\/\/ Find the first flavor name that is 5 characters long\nvar_dump(array_find($array, function (string $value) {\n    return strlen($value) == 5;\n})); \/\/ Returns \u201cMocha,\u201d even though \u201cMaple\u201d is the same length \n\n\/\/ Find the array key for the first flavor with a name longer than 5 characters.\nvar_dump(array_find_key($array, function (string $value) {\n    return strlen($value) &gt; 5;\n})); \/\/ Returns \u201cb\u201d\n\n\/\/ Check to see if any flavor name is less than 5 characters long\nvar_dump(array_any($array, function (string $value) {\n    return strlen($value) &lt; 5;\n})); \/\/ Returns false\n\n\/\/ Check to see if all flavor names are shorter than 8 characters\nvar_dump(array_all($array, function (string $value) {\n    return strlen($value) &lt; 8;\n})); \/\/ Returns true<\/code><\/pre>\n<h3 id=\"html5-parsing\" class=\"has-anchor-hash\">HTML5 parsing<\/h3>\n<p>HTM5 es el est\u00e1ndar predeterminado para la estructura de las p\u00e1ginas web modernas, pero la tecnolog\u00eda de an\u00e1lisis del Modelo de Objetos del Documento (DOM) de PHP se hab\u00eda estancado en HTML 4.01.<\/p>\n<p>En lugar de actualizar la clase <code>DOMDocument<\/code> existente que funciona con los est\u00e1ndares HTML m\u00e1s antiguos, PHP 8.4 viene con una nueva clase <code>DomHTMLDocument<\/code> que est\u00e1 preparada para HTM5.<\/p>\n<p>Puedes importar el contenido de una p\u00e1gina HTML5 as\u00ed:<\/p>\n<pre><code class=\"language-php\">$document = DomHTMLDocument::createFromString($html)<\/code><\/pre>\n<p>Adem\u00e1s del constructor <code>createFromString($html)<\/code> anterior, la clase tambi\u00e9n admite <code>createFromFile($path)<\/code> y <code>createEmpty()<\/code><\/p>\n<p>El nuevo analizador sint\u00e1ctico reconoce etiquetas sem\u00e1nticas de HTML5 como <code>main<\/code>, <code>article<\/code> y <code>section<\/code> que ahora nos resultan familiares a la mayor\u00eda de nosotros.<\/p>\n<h3 id=\"multibyte-trim-functions\" class=\"has-anchor-hash\">Multibyte trim functions<\/h3>\n<p>Otra novedad en PHP 8.4 que parece haber tardado en llegar es el soporte multibyte en las funciones trim:<\/p>\n<ul>\n<li><code>mb_trim()<\/code><\/li>\n<li><code>mb_ltrim()<\/code><\/li>\n<li><code>mb_rtrim()<\/code><\/li>\n<\/ul>\n<p>Al igual que la antigua funci\u00f3n PHP <code>trim()<\/code>, <code>mb_trim<\/code> elimina los espacios en blanco y algunos caracteres especiales, como los saltos de l\u00ednea, de ambos extremos de una cadena que puede contener caracteres multibyte. Las dem\u00e1s funciones recortan los extremos izquierdo o derecho de una cadena.<\/p>\n<h2>Deprecaciones en PHP 8.4<\/h2>\n<p>Cada versi\u00f3n de PHP trae consigo una lista de caracter\u00edsticas y funciones (algunas bastante oscuras) que se marcan para su posible eliminaci\u00f3n de la plataforma. Una de las deprecaciones m\u00e1s destacadas de PHP 8.4 es el seguimiento de sesiones sin cookies.<\/p>\n<h3>Eliminaci\u00f3n de las sesiones GET\/POST<\/h3>\n<p>Aunque las <a href=\"https:\/\/kinsta.com\/es\/blog\/wordpress-cookies-sesiones-php\/\">cookies<\/a> suelen ser el m\u00e9todo preferido para el seguimiento de las sesiones de usuario, PHP ha soportado la fijaci\u00f3n de datos de ID de sesi\u00f3n en par\u00e1metros GET\/POST. Para habilitar el seguimiento de sesiones mediante par\u00e1metros en las URL, se desactiva la configuraci\u00f3n de PHP <code>session.use_only_cookies<\/code>, y se puede habilitar la configuraci\u00f3n <code>session.use_trans_sid<\/code>.<\/p>\n<p>Con PHP 8.4, cualquiera de esos estados de la configuraci\u00f3n activar\u00e1 una advertencia de deprecado que puede aparecer en los registros de tu sitio web. Cuando se publique PHP 9, estas opciones dejar\u00e1n de estar disponibles.<\/p>\n<h3>Otras deprecaciones (y eliminaciones) en PHP 8.4<\/h3>\n<p>A continuaci\u00f3n hay una lista de funcionalidades que el equipo que est\u00e1 detr\u00e1s de PHP 8.4 ha decidido deprecar. (Algunas incluyen enlaces a m\u00e1s informaci\u00f3n sobre las funcionalidades),<\/p>\n<ul>\n<li>Se deprecan formalmente las propiedades soft-deprecated <code>DOMDocument<\/code> y <code>DOMEntity<\/code>.<\/li>\n<li>Eliminado <code>DOMImplementation::getFeature($feature, $version)<\/code>.<\/li>\n<li>Se depreca la constante <code>DOM_PHP_ERR<\/code>.<\/li>\n<li>Deprecada la etiqueta \u00abS\u00bb en <code><a href=\"http:\/\/www.php.net\/unserialize\" target=\"_blank\" rel=\"noopener noreferrer\">unserialize<\/a>()<\/code>.<\/li>\n<li>Deprecadas <code>session.sid_length<\/code> y <code>session.sid_bits_per_character<\/code>.<\/li>\n<li>Deprecado <code>SplFixedArray::__wakeup()<\/code>.<\/li>\n<li>Deprecado<code><a href=\"http:\/\/www.php.net\/xml_set_object\" target=\"_blank\" rel=\"noopener noreferrer\">xml_set_object()<\/a><\/code> y <code>xml_set_*_handler()<\/code> con nombres de m\u00e9todos de cadena.<\/li>\n<li>Deprecado pasar null y false a <code><a href=\"http:\/\/www.php.net\/dba_key_split\" target=\"_blank\" rel=\"noopener noreferrer\">dba_key_split()<\/a><\/code>.<\/li>\n<li>Se depreca el paso de tipos de datos incorrectos para las opciones en las funciones de la extensi\u00f3n ext\/hash.<\/li>\n<li>Deprecadas las constantes <code>SUNFUNCS_RET_STRING<\/code>, <code>SUNFUNCS_RET_DOUBLE<\/code>, <code>SUNFUNCS_RET_TIMESTAMP<\/code>.<\/li>\n<li class=\"AnswerParser_ListItem__XqLOV\">Deprecado mecanismo propietario de escape CSV<\/li>\n<li>Deprecada la constante <code>E_STRICT<\/code>.<\/li>\n<li>Deprecado <code><a href=\"http:\/\/www.php.net\/strtok\" target=\"_blank\" rel=\"noopener noreferrer\">strtok()<\/a><\/code>.<\/li>\n<li class=\"AnswerParser_ListItem__XqLOV\">Deprecado retornar valores no-string desde un manejador de salida de usuario<\/li>\n<li class=\"AnswerParser_ListItem__XqLOV\">Deprecada la producci\u00f3n de output en un manejador de salida de usuario<\/li>\n<li><code><a href=\"http:\/\/www.php.net\/file_put_contents\" target=\"_blank\" rel=\"noopener noreferrer\">Deprecadofile_put_contents()<\/a><\/code> con <code>$data<\/code> como array.<\/li>\n<li>Deprecados <code><a href=\"http:\/\/www.php.net\/mysqli_ping\" target=\"_blank\" rel=\"noopener noreferrer\">mysqli_ping()<\/a><\/code> y <code>mysqli::ping()<\/code><\/li>\n<li>Deprecado<code>mysqli_refresh()<\/code>.<\/li>\n<li>Deprecado <code><a href=\"http:\/\/www.php.net\/mysqli_kill\" target=\"_blank\" rel=\"noopener noreferrer\">mysqli_kill()<\/a><\/code>.<\/li>\n<li>Deprecado el segundo par\u00e1metro de\u00a0<code><a href=\"http:\/\/www.php.net\/mysqli_store_result\" target=\"_blank\" rel=\"noopener noreferrer\">mysqli_store_result()<\/a><\/code>.<\/li>\n<li>Deprecado <code><a href=\"http:\/\/www.php.net\/lcg_value\" target=\"_blank\" rel=\"noopener noreferrer\">lcg_value()<\/a><\/code>.<\/li>\n<li>Deprecado <code><a href=\"http:\/\/www.php.net\/uniqid\" target=\"_blank\" rel=\"noopener noreferrer\">uniqid()<\/a><\/code>.<\/li>\n<li>Deprecados <code><a href=\"http:\/\/www.php.net\/md5\" target=\"_blank\" rel=\"noopener noreferrer\">md5()<\/a><\/code>, <code><a href=\"http:\/\/www.php.net\/sha1\" target=\"_blank\" rel=\"noopener noreferrer\">sha1()<\/a><\/code>, <code><a href=\"http:\/\/www.php.net\/md5_file\" target=\"_blank\" rel=\"noopener noreferrer\">md5_file()<\/a><\/code> y <code><a href=\"http:\/\/www.php.net\/sha1_file\" target=\"_blank\" rel=\"noopener noreferrer\">sha1_file()<\/a><\/code>.<\/li>\n<li>Deprecado pasar <code>E_USER_ERROR<\/code> a <code><a href=\"http:\/\/www.php.net\/trigger_error\" target=\"_blank\" rel=\"noopener noreferrer\">trigger_error()<\/a><\/code>.<\/li>\n<li>Deprecado usar guion bajo (\u00ab_\u00bb) como nombre de clase.<\/li>\n<li>Deprecada constante <code>SOAP_FUNCTIONS_ALL<\/code>\u00a0y su uso en <code>SoapServer::addFunction()<\/code>.<\/li>\n<\/ul>\n<h2>Resumen<\/h2>\n<p>PHP 8.4 viene con algunos cambios interesantes. Estamos impacientes por tener pronto esta versi\u00f3n en nuestros servidores para nuestra <a href=\"https:\/\/kinsta.com\/es\/blog\/puntos-de-referencia-php\/\">evaluaci\u00f3n de rendimiento de PHP<\/a> anual\u00a0\u2014 es decir, nuestras pruebas con varios <a href=\"https:\/\/kinsta.com\/es\/blog\/frameworks-php\/\">sistemas de gesti\u00f3n de contenidos basados en PHP<\/a>.<\/p>\n<p>Tambi\u00e9n estamos interesados en ver cu\u00e1ndo empiezan los <a href=\"https:\/\/kinsta.com\/es\/blog\/tipos-de-desarrolladores\/\">desarrolladores<\/a> a incorporar algunas de las nuevas funcionalidades de PHP 8.4 en sus proyectos, sobre todo los hooks de propiedad.<\/p>\n<p><em>\u00bfQu\u00e9 funciones de PHP 8.4 son tus favoritas? \u00a1Comparte tus opiniones con nuestra comunidad en los comentarios!<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ya se respira sabor a calabaza, as\u00ed que ha llegado la hora de una nueva versi\u00f3n de PHP, el lenguaje de scripting del lado del servidor &#8230;<\/p>\n","protected":false},"author":259,"featured_media":77070,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[],"topic":[1317,1316],"class_list":["post-77069","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","topic-actualizaciones-php","topic-funcion-php"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v24.6 (Yoast SEO v24.6) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>PHP 8.4: \u00c9stas son las novedades y mejoras<\/title>\n<meta name=\"description\" content=\"Si es oto\u00f1o, es hora de una nueva versi\u00f3n de PHP. Aqu\u00ed tienes las novedades m\u00e1s destacadas de la versi\u00f3n 8.4 de PHP.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/kinsta.com\/es\/blog\/php-8-4\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"PHP 8.4: \u00c9stas son las novedades y mejoras\" \/>\n<meta property=\"og:description\" content=\"Si es oto\u00f1o, es hora de una nueva versi\u00f3n de PHP. Aqu\u00ed tienes las novedades m\u00e1s destacadas de la versi\u00f3n 8.4 de PHP.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/es\/blog\/php-8-4\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/kinsta.es\/\" \/>\n<meta property=\"article:published_time\" content=\"2024-11-08T13:35:16+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-11-11T16:36:39+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2024\/11\/what-is-new-in-php-8-4.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1460\" \/>\n\t<meta property=\"og:image:height\" content=\"730\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Steve Bonisteel\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:description\" content=\"Si es oto\u00f1o, es hora de una nueva versi\u00f3n de PHP. Aqu\u00ed tienes las novedades m\u00e1s destacadas de la versi\u00f3n 8.4 de PHP.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2024\/11\/what-is-new-in-php-8-4-1024x512.png\" \/>\n<meta name=\"twitter:creator\" content=\"@Kinsta_ES\" \/>\n<meta name=\"twitter:site\" content=\"@Kinsta_ES\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Steve Bonisteel\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"10 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/es\/blog\/php-8-4\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/php-8-4\/\"},\"author\":{\"name\":\"Steve Bonisteel\",\"@id\":\"https:\/\/kinsta.com\/es\/#\/schema\/person\/d84ceff87bd64a4368a581fc8aa8bd6f\"},\"headline\":\"PHP 8.4: \u00c9stas son las novedades y mejoras\",\"datePublished\":\"2024-11-08T13:35:16+00:00\",\"dateModified\":\"2025-11-11T16:36:39+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/php-8-4\/\"},\"wordCount\":1487,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/es\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/php-8-4\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2024\/11\/what-is-new-in-php-8-4.png\",\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinsta.com\/es\/blog\/php-8-4\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/es\/blog\/php-8-4\/\",\"url\":\"https:\/\/kinsta.com\/es\/blog\/php-8-4\/\",\"name\":\"PHP 8.4: \u00c9stas son las novedades y mejoras\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/es\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/php-8-4\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/php-8-4\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2024\/11\/what-is-new-in-php-8-4.png\",\"datePublished\":\"2024-11-08T13:35:16+00:00\",\"dateModified\":\"2025-11-11T16:36:39+00:00\",\"description\":\"Si es oto\u00f1o, es hora de una nueva versi\u00f3n de PHP. Aqu\u00ed tienes las novedades m\u00e1s destacadas de la versi\u00f3n 8.4 de PHP.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/php-8-4\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/es\/blog\/php-8-4\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/kinsta.com\/es\/blog\/php-8-4\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2024\/11\/what-is-new-in-php-8-4.png\",\"contentUrl\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2024\/11\/what-is-new-in-php-8-4.png\",\"width\":1460,\"height\":730},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/es\/blog\/php-8-4\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/es\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Actualizaciones de PHP\",\"item\":\"https:\/\/kinsta.com\/es\/secciones\/actualizaciones-php\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"PHP 8.4: \u00c9stas son las novedades y mejoras\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinsta.com\/es\/#website\",\"url\":\"https:\/\/kinsta.com\/es\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Soluciones de alojamiento premium, r\u00e1pidas y seguras\",\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/es\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinsta.com\/es\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinsta.com\/es\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/es\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/kinsta.com\/es\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/es\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/kinsta.es\/\",\"https:\/\/x.com\/Kinsta_ES\",\"https:\/\/www.instagram.com\/kinstahosting\/\",\"https:\/\/www.linkedin.com\/company\/kinsta\/\",\"https:\/\/www.pinterest.com\/kinstahosting\/\",\"https:\/\/www.youtube.com\/c\/Kinsta\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/kinsta.com\/es\/#\/schema\/person\/d84ceff87bd64a4368a581fc8aa8bd6f\",\"name\":\"Steve Bonisteel\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/kinsta.com\/es\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/0adffb3f9c86a6ec8245f8399d540823?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/0adffb3f9c86a6ec8245f8399d540823?s=96&d=mm&r=g\",\"caption\":\"Steve Bonisteel\"},\"description\":\"Steve Bonisteel is a Technical Editor at Kinsta who began his writing career as a print journalist, chasing ambulances and fire trucks. He has been covering Internet-related technology since the late 1990s.\",\"url\":\"https:\/\/kinsta.com\/es\/blog\/author\/stevebonisteel\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"PHP 8.4: \u00c9stas son las novedades y mejoras","description":"Si es oto\u00f1o, es hora de una nueva versi\u00f3n de PHP. Aqu\u00ed tienes las novedades m\u00e1s destacadas de la versi\u00f3n 8.4 de PHP.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/kinsta.com\/es\/blog\/php-8-4\/","og_locale":"es_ES","og_type":"article","og_title":"PHP 8.4: \u00c9stas son las novedades y mejoras","og_description":"Si es oto\u00f1o, es hora de una nueva versi\u00f3n de PHP. Aqu\u00ed tienes las novedades m\u00e1s destacadas de la versi\u00f3n 8.4 de PHP.","og_url":"https:\/\/kinsta.com\/es\/blog\/php-8-4\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/kinsta.es\/","article_published_time":"2024-11-08T13:35:16+00:00","article_modified_time":"2025-11-11T16:36:39+00:00","og_image":[{"width":1460,"height":730,"url":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2024\/11\/what-is-new-in-php-8-4.png","type":"image\/png"}],"author":"Steve Bonisteel","twitter_card":"summary_large_image","twitter_description":"Si es oto\u00f1o, es hora de una nueva versi\u00f3n de PHP. Aqu\u00ed tienes las novedades m\u00e1s destacadas de la versi\u00f3n 8.4 de PHP.","twitter_image":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2024\/11\/what-is-new-in-php-8-4-1024x512.png","twitter_creator":"@Kinsta_ES","twitter_site":"@Kinsta_ES","twitter_misc":{"Escrito por":"Steve Bonisteel","Tiempo de lectura":"10 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/es\/blog\/php-8-4\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/es\/blog\/php-8-4\/"},"author":{"name":"Steve Bonisteel","@id":"https:\/\/kinsta.com\/es\/#\/schema\/person\/d84ceff87bd64a4368a581fc8aa8bd6f"},"headline":"PHP 8.4: \u00c9stas son las novedades y mejoras","datePublished":"2024-11-08T13:35:16+00:00","dateModified":"2025-11-11T16:36:39+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/es\/blog\/php-8-4\/"},"wordCount":1487,"commentCount":0,"publisher":{"@id":"https:\/\/kinsta.com\/es\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/es\/blog\/php-8-4\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2024\/11\/what-is-new-in-php-8-4.png","inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinsta.com\/es\/blog\/php-8-4\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/es\/blog\/php-8-4\/","url":"https:\/\/kinsta.com\/es\/blog\/php-8-4\/","name":"PHP 8.4: \u00c9stas son las novedades y mejoras","isPartOf":{"@id":"https:\/\/kinsta.com\/es\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/es\/blog\/php-8-4\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/es\/blog\/php-8-4\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2024\/11\/what-is-new-in-php-8-4.png","datePublished":"2024-11-08T13:35:16+00:00","dateModified":"2025-11-11T16:36:39+00:00","description":"Si es oto\u00f1o, es hora de una nueva versi\u00f3n de PHP. Aqu\u00ed tienes las novedades m\u00e1s destacadas de la versi\u00f3n 8.4 de PHP.","breadcrumb":{"@id":"https:\/\/kinsta.com\/es\/blog\/php-8-4\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/es\/blog\/php-8-4\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/kinsta.com\/es\/blog\/php-8-4\/#primaryimage","url":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2024\/11\/what-is-new-in-php-8-4.png","contentUrl":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2024\/11\/what-is-new-in-php-8-4.png","width":1460,"height":730},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/es\/blog\/php-8-4\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/es\/"},{"@type":"ListItem","position":2,"name":"Actualizaciones de PHP","item":"https:\/\/kinsta.com\/es\/secciones\/actualizaciones-php\/"},{"@type":"ListItem","position":3,"name":"PHP 8.4: \u00c9stas son las novedades y mejoras"}]},{"@type":"WebSite","@id":"https:\/\/kinsta.com\/es\/#website","url":"https:\/\/kinsta.com\/es\/","name":"Kinsta\u00ae","description":"Soluciones de alojamiento premium, r\u00e1pidas y seguras","publisher":{"@id":"https:\/\/kinsta.com\/es\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinsta.com\/es\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Organization","@id":"https:\/\/kinsta.com\/es\/#organization","name":"Kinsta","url":"https:\/\/kinsta.com\/es\/","logo":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/kinsta.com\/es\/#\/schema\/logo\/image\/","url":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinsta.com\/es\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/kinsta.es\/","https:\/\/x.com\/Kinsta_ES","https:\/\/www.instagram.com\/kinstahosting\/","https:\/\/www.linkedin.com\/company\/kinsta\/","https:\/\/www.pinterest.com\/kinstahosting\/","https:\/\/www.youtube.com\/c\/Kinsta"]},{"@type":"Person","@id":"https:\/\/kinsta.com\/es\/#\/schema\/person\/d84ceff87bd64a4368a581fc8aa8bd6f","name":"Steve Bonisteel","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/kinsta.com\/es\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/0adffb3f9c86a6ec8245f8399d540823?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/0adffb3f9c86a6ec8245f8399d540823?s=96&d=mm&r=g","caption":"Steve Bonisteel"},"description":"Steve Bonisteel is a Technical Editor at Kinsta who began his writing career as a print journalist, chasing ambulances and fire trucks. He has been covering Internet-related technology since the late 1990s.","url":"https:\/\/kinsta.com\/es\/blog\/author\/stevebonisteel\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/posts\/77069","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/users\/259"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/comments?post=77069"}],"version-history":[{"count":10,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/posts\/77069\/revisions"}],"predecessor-version":[{"id":80904,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/posts\/77069\/revisions\/80904"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/77069\/translations\/en"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/77069\/translations\/it"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/77069\/translations\/pt"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/77069\/translations\/fr"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/77069\/translations\/de"},{"embeddable":true,"hreflang":"ja","title":"Japanese","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/77069\/translations\/jp"},{"embeddable":true,"hreflang":"nl","title":"Dutch","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/77069\/translations\/nl"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/77069\/translations\/es"},{"href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/77069\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/media\/77070"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/media?parent=77069"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/tags?post=77069"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/topic?post=77069"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}