{"id":56199,"date":"2022-08-11T14:22:59","date_gmt":"2022-08-11T12:22:59","guid":{"rendered":"https:\/\/kinqsta.com\/es\/?p=56199&#038;preview=true&#038;preview_id=56199"},"modified":"2023-08-23T11:37:49","modified_gmt":"2023-08-23T09:37:49","slug":"php-8-2","status":"publish","type":"post","link":"https:\/\/kinqsta.com\/es\/blog\/php-8-2\/","title":{"rendered":"Novedades de PHP 8.2 &#8211; Nuevas Caracter\u00edsticas, Deprecaciones, Cambios y M\u00e1s"},"content":{"rendered":"<p>PHP 8.2 se ha construido sobre la base renovada establecida por <a href=\"https:\/\/kinqsta.com\/es\/blog\/php-8\/\">PHP 8.0<\/a> y <a href=\"https:\/\/kinqsta.com\/es\/blog\/php-8-1\/\">PHP 8.1<\/a>. Ahora que <a href=\"https:\/\/www.php.net\/releases\/8.2\/en.php\">PHP 8.2<\/a> ya est\u00e1 disponible, vamos a analizar en detalle las novedades de PHP 8.2 \u2014 desde sus nuevas caracter\u00edsticas y mejoras hasta las depreciaciones y cambios menores.<\/p>\n<p>Como PHP 8.2 entr\u00f3 en su fase de congelaci\u00f3n de caracter\u00edsticas el 19 de julio de 2022, no se pueden esperar adiciones significativas a esta lista.<\/p>\n<p>\u00bfEmocionado? Nosotros tambi\u00e9n.<\/p>\n<p>\u00a1Empecemos!<\/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 Caracter\u00edsticas y Mejoras en PHP 8.2<\/h2>\n<p>Empecemos explorando todas las caracter\u00edsticas m\u00e1s recientes de PHP 8.2. Es una lista bastante extensa:<\/p>\n<div><\/div><kinsta-auto-toc list-style=\"none\" selector=\"h3\" count-number=\"15\" sub-toc=\"true\"><\/kinsta-auto-toc>\n<h3>Nuevas Clases <code>readonly<\/code><\/h3>\n<p>PHP 8.1 introdujo la <a href=\"https:\/\/kinqsta.com\/es\/blog\/php-8-1\/#new-readonly-properties\">funci\u00f3n<code>readonly<\/code> para las propiedades de las clases<\/a>. Ahora, PHP 8.2 a\u00f1ade soporte para <a href=\"https:\/\/wiki.php.net\/rfc\/readonly_classes\">declarar toda la clase como <code>readonly<\/code>.<\/a><\/p>\n<p>Si declaras una clase como <code>readonly<\/code>, todas sus propiedades heredar\u00e1n autom\u00e1ticamente la caracter\u00edstica <code>readonly<\/code>. As\u00ed, declarar una clase <code>readonly<\/code> es lo mismo que declarar todas las propiedades de la clase como <code>readonly<\/code>.<\/p>\n<p>Por ejemplo, con PHP 8.1, ten\u00edas que escribir este tedioso c\u00f3digo para declarar todas las propiedades de la clase como <code>readonly<\/code>:<\/p>\n<pre><code class=\"language-php\">class MyClass\n{\npublic readonly string $myValue,\npublic readonly int $myOtherValue\npublic readonly string $myAnotherValue\npublic readonly int $myYetAnotherValue\n}<\/code><\/pre>\n<p>Imagina lo mismo con muchas m\u00e1s propiedades. Ahora, con PHP 8.2, puedes escribir simplemente esto:<\/p>\n<pre><code class=\"language-php\">readonly class MyClass\n{\npublic string $myValue,\npublic int $myOtherValue\npublic string $myAnotherValue\npublic int $myYetAnotherValue\n}<\/code><\/pre>\n<p>Tambi\u00e9n puedes declarar clases abstractas o finales como <code>readonly<\/code>. Aqu\u00ed, el orden de las palabras clave no importa.<\/p>\n<pre><code class=\"language-php\">abstract readonly class Free {}\nfinal readonly class Dom {}<\/code><\/pre>\n<p>Tambi\u00e9n puedes declarar una clase <code>readonly<\/code> sin propiedades. En efecto, esto evita las propiedades din\u00e1micas, pero permite que las clases hijas declaren sus propiedades <code>readonly<\/code> expl\u00edcitamente.<\/p>\n<p>A continuaci\u00f3n, las clases <code>readonly<\/code> s\u00f3lo pueden contener propiedades tipificadas: la misma regla para declarar propiedades individuales <strong>de s\u00f3lo lectura<\/strong>.<\/p>\n<p>Puedes utilizar la propiedad de tipo <code>mixed<\/code> si no puedes declarar una propiedad de tipo estricto.<\/p>\n<p>Si intentas declarar una clase <code>readonly<\/code> sin una propiedad tipificada, se producir\u00e1 un error fatal:<\/p>\n<pre><code class=\"language-php\">readonly class Type {\n    public $nope;\n}\nFatal error: Readonly property Type::$nope must have type in ... on line ... <\/code><\/pre>\n<p>Adem\u00e1s, no puedes declarar <code>readonly<\/code> para ciertas funciones de PHP:<\/p>\n<ul>\n<li><strong>Enums <\/strong>(ya que <a href=\"https:\/\/kinqsta.com\/es\/blog\/php-8-1\/#enums\">no pueden contener ninguna propiedad<\/a>)<\/li>\n<li><strong>Traits<\/strong><\/li>\n<li><strong>Interfaces<\/strong><\/li>\n<\/ul>\n<p>El intento de declarar cualquiera de estas funciones como <code>readonly<\/code> dar\u00e1 lugar a un error de an\u00e1lisis.<\/p>\n<pre><code class=\"language-php\">readonly interface Destiny {}\nParse error: syntax error, unexpected token \"interface\", expecting \"abstract\" or \"final\" or \"readonly\" or \"class\" in ... on line ...<\/code><\/pre>\n<p>Como ocurre con todas las palabras clave de PHP, la palabra clave <code>readonly<\/code> no distingue entre may\u00fasculas y min\u00fasculas.<\/p>\n<p>PHP 8.2 tambi\u00e9n desaprueba las propiedades din\u00e1micas (m\u00e1s adelante se hablar\u00e1 de ello). Pero no puedes impedir que se a\u00f1adan propiedades din\u00e1micas a una clase. Sin embargo, si lo haces en una clase <code>readonly<\/code> s\u00f3lo se producir\u00e1 un Error Fatal.<\/p>\n<pre><code class=\"language-php\">Fatal error: Readonly property Test::$test must have type in ... on line ...<\/code><\/pre>\n<h3>Permitir <code>true<\/code>, <code>false<\/code>, y <code>null<\/code> como Tipos Independientes<\/h3>\n<p>PHP ya incluye tipos escalares como <code>int<\/code>, <code>string<\/code>, y <code>bool<\/code>. Esto se ampli\u00f3 en PHP 8.0 con la adici\u00f3n de <a href=\"https:\/\/kinqsta.com\/es\/blog\/php-8\/#union-types-2-0\">tipos de uni\u00f3n<\/a>, que permiten que los valores sean de diferentes tipos. La misma RFC tambi\u00e9n permit\u00eda utilizar <code>false<\/code> y <code>null<\/code> como parte de un tipo de uni\u00f3n, pero no se permit\u00edan como tipos independientes.<\/p>\n<p>Si intentabas declarar <code>false<\/code> o <code>null<\/code> como tipos independientes \u2014 sin que formaran parte de un tipo de uni\u00f3n \u2014 se produc\u00eda un error fatal.<\/p>\n<pre><code class=\"language-php\">function spam(): null {}\nfunction eggs(): false {}\n\nFatal error: Null can not be used as a standalone type in ... on line ...\nFatal error: False can not be used as a standalone type in ... on line ...<\/code><\/pre>\n<p>Para evitar esta situaci\u00f3n, PHP 8.2 a\u00f1ade soporte para utilizar <a href=\"https:\/\/wiki.php.net\/rfc\/null-false-standalone-types\"><code>false<\/code> y <code>null<\/code><\/a> como tipos independientes. Con esta adici\u00f3n, el sistema de tipos de PHP es m\u00e1s expresivo y completo. Ahora puedes declarar con precisi\u00f3n los tipos de retorno, de par\u00e1metro y de propiedad.<\/p>\n<p>Adem\u00e1s, PHP sigue sin incluir un tipo <code>true<\/code>, que parece ser una contrapartida natural del tipo <code>false<\/code>. PHP 8.2 corrige esto y <a href=\"https:\/\/wiki.php.net\/rfc\/true-type\">a\u00f1ade tambi\u00e9n soporte para el tipo<\/a>\u00a0<code>true<\/code>. No permite la coerci\u00f3n, exactamente como se comporta el tipo <code>false<\/code>.<\/p>\n<p>Ambos tipos <code>true<\/code> y <code>false<\/code> son esencialmente un tipo de uni\u00f3n del tipo <code>bool<\/code> de PHP. Para evitar la redundancia, no puedes declarar estos tres tipos juntos en un tipo de uni\u00f3n. Si lo haces, se producir\u00e1 un error fatal en tiempo de compilaci\u00f3n.<\/p>\n<h3>Tipos de Forma Normal Disyuntiva (DNF)<\/h3>\n<p><a href=\"https:\/\/en.wikipedia.org\/wiki\/Disjunctive_normal_form\">La forma normal disyuntiva (DNF)<\/a> es una forma estandarizada de organizar las expresiones booleanas. Consiste en una disyunci\u00f3n de conjunciones \u2014 en t\u00e9rminos booleanos, es un <strong>OR de ANDs<\/strong>.<\/p>\n<p>Aplicar DNF a las declaraciones de tipos permite una forma est\u00e1ndar de escribir <a href=\"https:\/\/kinqsta.com\/es\/blog\/php-8-1\/#pure-intersection-types\">tipos combinados de Uni\u00f3n e Intersecci\u00f3n<\/a> que el analizador sint\u00e1ctico puede manejar. La <a href=\"https:\/\/wiki.php.net\/rfc\/dnf_types\">nueva funci\u00f3n de tipos DNF<\/a>\u00a0de PHP 8.2 es sencilla pero potente si se utiliza correctamente.<\/p>\n<p>La RFC ofrece el siguiente ejemplo. Supone que ya existen las siguientes definiciones de interfaz y de clase:<\/p>\n<pre><code class=\"language-php\">interface A {}\ninterface B {}\ninterface C extends A {}\ninterface D {}\n\nclass W implements A {}\nclass X implements B {}\nclass Y implements A, B {}\nclass Z extends Y implements C {}<\/code><\/pre>\n<p>Con los tipos DNF, puedes realizar declaraciones de tipo para las propiedades, los par\u00e1metros y los valores de retorno de la siguiente manera<\/p>\n<pre><code class=\"language-php\">\/\/ Accepts an object that implements both A and B,\n\/\/ OR an object that implements D\n(A&B)|D\n\n\/\/ Accepts an object that implements C, \n\/\/ OR a child of X that also implements D,\n\/\/ OR null\nC|(X&D)|null\n\n\/\/ Accepts an object that implements all three of A, B, and D, \n\/\/ OR an int, \n\/\/ OR null.\n(A&B&D)|int|null<\/code><\/pre>\n<p>En algunos casos, las propiedades pueden no estar en formas DNF. Declararlas como tales dar\u00e1 lugar a un error de an\u00e1lisis. Pero siempre puedes reescribirlas como<\/p>\n<pre><code class=\"language-php\">A&(B|D)\n\/\/ Can be rewritten as (A&B)|(A&D)\n\nA|(B&(D|W)|null)\n\/\/ Can be rewritten as A|(B&D)|(B&W)|null<\/code><\/pre>\n<p>Debes tener en cuenta que cada segmento de un tipo DNF debe ser \u00fanico. Por ejemplo, declarar <code>(A&B)|(B&A)<\/code> no es v\u00e1lido, ya que los dos segmentos <strong>OR <\/strong>son l\u00f3gicamente iguales.<\/p>\n<p>Adem\u00e1s, los segmentos que son subconjuntos estrictos de otro segmento tampoco est\u00e1n permitidos. Esto se debe a que el superconjunto ya tendr\u00e1 todas las instancias del subconjunto, lo que hace redundante el uso de DNF.<\/p>\n<h3>Redactar los Par\u00e1metros Confidenciales en las Back Traces<\/h3>\n<p>Como casi cualquier <a href=\"https:\/\/kinqsta.com\/es\/blog\/mejor-lenguaje-de-programacion-para-aprender\/\">lenguaje de programaci\u00f3n<\/a>, <a href=\"https:\/\/kinqsta.com\/php\/\">PHP<\/a> permite trazar su stack de llamadas en cualquier punto de la ejecuci\u00f3n del stack facilita la depuraci\u00f3n del c\u00f3digo para corregir errores y cuellos de botella en el rendimiento. Forma la columna vertebral de herramientas como <a href=\"https:\/\/kinqsta.com\/es\/herramienta-apm\/\">Kinsta APM<\/a>, nuestra <a href=\"https:\/\/kinqsta.com\/es\/blog\/monitoreo-rendimiento-aplicaciones\/\">herramienta de monitorizaci\u00f3n del rendimiento<\/a> dise\u00f1ada a medida para los sitios de WordPress.<\/p>\n<figure id=\"attachment_56341\" aria-describedby=\"caption-attachment-56341\" style=\"width: 1102px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/kinqsta.com\/es\/wp-content\/uploads\/sites\/8\/2022\/08\/Kinsta-APM-WooCommerce-Admin-Slow-Transactions-es.png\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-56341 size-full\" src=\"https:\/\/kinqsta.com\/es\/wp-content\/uploads\/sites\/8\/2022\/08\/Kinsta-APM-WooCommerce-Admin-Slow-Transactions-es.png\" alt=\"Seguimiento de las transacciones lentas de WooCommerce con Kinsta APM.\" width=\"1102\" height=\"659\" srcset=\"https:\/\/kinqsta.com\/es\/wp-content\/uploads\/sites\/8\/2022\/08\/Kinsta-APM-WooCommerce-Admin-Slow-Transactions-es.png 1102w, https:\/\/kinqsta.com\/es\/wp-content\/uploads\/sites\/8\/2022\/08\/Kinsta-APM-WooCommerce-Admin-Slow-Transactions-es-300x179.png 300w, https:\/\/kinqsta.com\/es\/wp-content\/uploads\/sites\/8\/2022\/08\/Kinsta-APM-WooCommerce-Admin-Slow-Transactions-es-1024x612.png 1024w, https:\/\/kinqsta.com\/es\/wp-content\/uploads\/sites\/8\/2022\/08\/Kinsta-APM-WooCommerce-Admin-Slow-Transactions-es-768x459.png 768w\" sizes=\"auto, (max-width: 1102px) 100vw, 1102px\" \/><\/a><figcaption id=\"caption-attachment-56341\" class=\"wp-caption-text\">Seguimiento de las transacciones lentas de WooCommerce con Kinsta APM.<\/figcaption><\/figure>\n<p>Realizar un seguimiento del stack no detiene la ejecuci\u00f3n del programa. Normalmente, la mayor\u00eda de los stack traces se ejecutan en segundo plano y se registran de forma silenciosa, para poder inspeccionarlos posteriormente si es necesario.<\/p>\n<p>Sin embargo, algunas de estas detalladas trazas del stack de PHP pueden ser un inconveniente si las compartes con servicios de terceros, normalmente para el <a href=\"https:\/\/kinqsta.com\/es\/blog\/logs-de-errores-de-wordpress\/\">an\u00e1lisis del registro de errores<\/a>, el seguimiento de errores, etc. Estos stack traces pueden incluir informaci\u00f3n sensible como nombres de usuario, contrase\u00f1as y variables de entorno.<\/p>\n<p><a href=\"https:\/\/wiki.php.net\/rfc\/redact_parameters_in_back_traces\">Esta propuesta de RFC<\/a> ofrece un ejemplo de ello:<\/p>\n<blockquote><p>Un \u00abinfractor\u00bb habitual es PDO, que toma la contrase\u00f1a de la base de datos como par\u00e1metro del constructor e intenta conectarse inmediatamente a la base de datos dentro del constructor, en lugar de tener un constructor puro y un m\u00e9todo <strong>separado -&gt;connect()<\/strong>. As\u00ed, cuando la conexi\u00f3n a la base de datos falla, el seguimiento del stack incluir\u00e1 la contrase\u00f1a de la base de datos:<\/p>\n<pre><code class=\"language-php\">PDOException: SQLSTATE[HY000] [2002] No such file or directory in \/var\/www\/html\/test.php:3\nStack trace: #0 \/var\/www\/html\/test.php(3): PDO-&gt;__construct('mysql:host=loca...', 'root', 'password')\n#1 {main}<\/code><\/pre>\n<\/blockquote>\n<p>PHP 8.2 te permite <a href=\"https:\/\/wiki.php.net\/rfc\/redact_parameters_in_back_traces\">marcar estos par\u00e1metros sensibles<\/a>\u00a0con un nuevo atributo <code>\\SensitiveParameter<\/code>. Cualquier par\u00e1metro marcado como sensible no aparecer\u00e1 en tus backtraces. As\u00ed, puedes compartirlos sin preocupaciones con cualquier servicio de terceros.<\/p>\n<p>He aqu\u00ed un ejemplo sencillo con un solo par\u00e1metro sensible:<\/p>\n<pre><code class=\"language-php\">&lt;?php\n\nfunction example(\n    $ham,\n    #[\\SensitiveParameter] $eggs,\n    $butter\n) {\n    throw new \\Exception('Error');\n}\n\nexample('ham', 'eggs', 'butter');\n\n\/*\nFatal error: Uncaught Exception: Error in test.php:8\nStack trace:\n#0 test.php(11): test('ham', Object(SensitiveParameterValue), 'butter')\n#1 {main}\nthrown in test.php on line 8\n*\/<\/code><\/pre>\n<p>Cuando generes un backtrace, cualquier par\u00e1metro con el atributo <code>\\SensitiveParameter<\/code> ser\u00e1 sustituido por un objeto <code>\\SensitiveParameterValue<\/code>, y su valor real nunca se almacenar\u00e1 en el trazado. El objeto <code>SensitiveParameterValue<\/code> encapsula el valor real del par\u00e1metro, por si lo necesitas por alguna raz\u00f3n.<\/p>\n<h3>Nueva Funci\u00f3n <code>mysqli_execute_query<\/code> y M\u00e9todo <code>mysqli::execute_query<\/code><\/h3>\n<p>\u00bfHas utilizado alguna vez la funci\u00f3n <code>mysqli_query()<\/code> con valores de usuario que escapan peligrosamente s\u00f3lo para ejecutar una consulta MySQLi parametrizada?<\/p>\n<p>PHP 8.2 <a href=\"https:\/\/wiki.php.net\/rfc\/mysqli_execute_query\">facilita la ejecuci\u00f3n de consultas MYSQLi parametrizadas<\/a>\u00a0con la nueva funci\u00f3n <code>mysqli_execute_query($sql, $params)<\/code> y el m\u00e9todo <code>mysqli::execute_query<\/code>.<\/p>\n<p>B\u00e1sicamente, esta nueva funci\u00f3n es una combinaci\u00f3n de las funciones <code>mysqli_prepare()<\/code>, <code>mysqli_execute()<\/code> y <code>mysqli_stmt_get_result()<\/code>. Con ella, la consulta MySQLi se preparar\u00e1, se vincular\u00e1 (si pasas alg\u00fan par\u00e1metro) y se ejecutar\u00e1 dentro de la propia funci\u00f3n. Si la consulta se ejecuta con \u00e9xito, devolver\u00e1 un objeto <code>mysqli_result<\/code>. Si no tiene \u00e9xito, devolver\u00e1 <code>false<\/code>.<\/p>\n<p>La propuesta de RFC ofrece un ejemplo sencillo pero potente:<\/p>\n<pre><code class=\"\"language-php\">foreach ($db-&gt;execute_query('SELECT * FROM user WHERE name LIKE ? AND type_id IN (?, ?)', [$name, $type1, $type2]) as $row) {\nprint_r($row);\n}<\/code><\/pre>\n<h3>Recuperar Propiedades de <code>enum<\/code> en Expresiones de <code>const<\/code><\/h3>\n<p><a href=\"https:\/\/wiki.php.net\/rfc\/fetch_property_in_const_expressions\">Esta RFC propone<\/a> permitir que el operador <code>-&gt;\/?-&gt;<\/code> obtenga <a href=\"https:\/\/kinqsta.com\/es\/blog\/php-8-1\/#enums\"><code>enum<\/code><\/a> propiedades en las expresiones <code>const<\/code>.<\/p>\n<p>La raz\u00f3n principal de esta nueva funci\u00f3n es que no puedes utilizar los objetos <code>enum<\/code> en algunos lugares, como las claves de los arrays. En tal caso, tendr\u00e1s que repetir el valor del caso <code>enum<\/code> s\u00f3lo para utilizarlo.<\/p>\n<p>Permitir la obtenci\u00f3n de propiedades <code>enum<\/code> en lugares donde no se permiten los objetos <code>enum<\/code> puede simplificar este procedimiento.<\/p>\n<p>Esto significa que el siguiente c\u00f3digo es ahora v\u00e1lido:<\/p>\n<pre><code class=\"language-php\">const C = [self::B-&gt;value =&gt; self::B];<\/code><\/pre>\n<p>Y para estar seguros, esta RFC tambi\u00e9n incluye soporte para el operador nullsafe <code>?-&gt;<\/code>.<\/p>\n<h3>Permitir Constantes en los Traits<\/h3>\n<p>PHP incluye una forma de reutilizar el c\u00f3digo llamada Traits. Son geniales para la reutilizaci\u00f3n de c\u00f3digo entre clases.<\/p>\n<p>Actualmente, los Traits s\u00f3lo permiten definir m\u00e9todos y propiedades, pero no constantes. Eso significa que no puedes definir las invariantes esperadas por un Trait dentro del propio Trait. Para evitar esta limitaci\u00f3n, tienes que definir las constantes en su clase de composici\u00f3n o en una interfaz implementada por su clase compuesta.<\/p>\n<p><a href=\"https:\/\/wiki.php.net\/rfc\/constants_in_traits\">Esta RFC propone<\/a> permitir la definici\u00f3n de constantes en los Traits. Estas constantes pueden definirse igual que se definir\u00edan las constantes de la clase. Este ejemplo extra\u00eddo directamente de la RFC aclara su uso:<\/p>\n<pre><code class=\"language-php\">trait Foo {\n    public const FLAG_1 = 1;\n    protected const FLAG_2 = 2;\n    private const FLAG_3 = 2;\n\n    public function doFoo(int $flags): void {\n        if ($flags & self::FLAG_1) {\n            echo 'Got flag 1';\n        }\n        if ($flags & self::FLAG_2) {\n            echo 'Got flag 2';\n        }\n        if ($flags & self::FLAG_3) {\n        echo 'Got flag 3';\n        }\n    }\n}<\/code><\/pre>\n<p>Las constantes de los Traits tambi\u00e9n se integran en la definici\u00f3n de la clase que los compone, al igual que las definiciones de propiedades y m\u00e9todos de un Trait. Tambi\u00e9n tienen restricciones similares a las de las propiedades de los Traits. Como se indica en la RFC, esta propuesta \u2014 aunque es un buen comienzo \u2014 necesita m\u00e1s trabajo para concretar la funci\u00f3n.<\/p>\n<h2>Deprecaciones en PHP 8.2<\/h2>\n<p>Ahora podemos pasar a explorar todas las deprecaciones de PHP 8.2. Esta lista no es tan grande como sus nuevas caracter\u00edsticas:<\/p>\n<div><\/div><kinsta-auto-toc list-style=\"disc\" selector=\"h3\" count-number=\"15\" sub-toc=\"true\"><\/kinsta-auto-toc>\n<h3>Deprecaci\u00f3n de las Propiedades Din\u00e1micas (y el Nuevo Atributo <code>#[AllowDynamicProperties]<\/code> )<\/h3>\n<p>Hasta PHP 8.1, pod\u00edas <a href=\"https:\/\/kinqsta.com\/es\/blog\/php-vs-javascript\/#typing-of-variables\">establecer y recuperar din\u00e1micamente propiedades de clase no declaradas<\/a> en PHP. Por ejemplo:<\/p>\n<pre><code class=\"language-php\">class Post {\n    private int $pid;\n}\n\n$post = new Post();\n$post-&gt;name = 'Kinsta';<code class=\"language-php\"><\/code><\/code><\/pre>\n<p>Aqu\u00ed, la clase <code>Post<\/code> no declara una propiedad <code>name<\/code>. Pero como PHP permite las propiedades din\u00e1micas, puedes establecerla fuera de la declaraci\u00f3n de la clase. Esa es su mayor\u00a0 \u2014 y posiblemente, la \u00fanica \u2014 ventaja.<\/p>\n<p>Las propiedades din\u00e1micas permiten que aparezcan errores y comportamientos inesperados en tu c\u00f3digo. Por ejemplo, si cometes alg\u00fan error al declarar una propiedad de la clase fuera de ella, es f\u00e1cil perderla de vista, sobre todo al depurar cualquier error dentro de esa clase.<\/p>\n<p>A partir de PHP 8.2, <a href=\"https:\/\/wiki.php.net\/rfc\/deprecate_dynamic_properties\">las propiedades din\u00e1micas est\u00e1n depreciadas<\/a>. Establecer un valor a una propiedad de clase no declarada emitir\u00e1 un aviso de deprecaci\u00f3n la primera vez que se establezca la propiedad.<\/p>\n<pre><code class=\"language-php\">class Foo {}\n$foo = new Foo;\n\n\/\/ Deprecated: Creation of dynamic property Foo::$bar is deprecated\n$foo-&gt;bar = 1;\n\n\/\/ No deprecation warning: Dynamic property already exists.\n$foo-&gt;bar = 2;<code class=\"language-php\"><\/code><\/code><\/pre>\n<p>Sin embargo, a partir de PHP 9.0, al establecerla se producir\u00e1 un error en <code>ErrorException<\/code>.<\/p>\n<p>Si tu c\u00f3digo est\u00e1 lleno de propiedades din\u00e1micas \u2014 y hay mucho c\u00f3digo PHP que lo est\u00e1 \u2014 y si quieres detener estos avisos de deprecaci\u00f3n despu\u00e9s de actualizarte a PHP 8.2, puedes utilizar el nuevo atributo <code>#[AllowDynamicProperties]<\/code> de PHP 8.2 para permitir propiedades din\u00e1micas en las clases.<\/p>\n<pre><code class=\"language-php\">#[AllowDynamicProperties]\nclass Pets {}\nclass Cats extends Pets {}\n\n\/\/ You'll get no deprecation warning\n$obj = new Pets;\n$obj-&gt;test = 1;\n\n\/\/ You'll get no deprecation warning for child classes\n$obj = new Cats;\n$obj-&gt;test = 1;<\/code><\/pre>\n<p>De acuerdo con la RFC, las clases marcadas como <code>#[AllowDynamicProperties]<\/code>, as\u00ed como sus clases hijas, pueden seguir utilizando propiedades din\u00e1micas sin necesidad de deprecarlas o eliminarlas.<\/p>\n<p>Tambi\u00e9n debes tener en cuenta que, en PHP 8.2, la \u00fanica clase marcada como <code>#[AllowDynamicProperties]<\/code> es <code>stdClass<\/code>. Adem\u00e1s, las propiedades a las que se accede a trav\u00e9s de los <a href=\"https:\/\/www.php.net\/manual\/en\/language.oop5.magic.php\">m\u00e9todos m\u00e1gicos de PHP<\/a> <code>__get()<\/code> o <code>__set()<\/code> no se consideran propiedades din\u00e1micas, por lo que no lanzar\u00e1n un aviso de deprecaci\u00f3n.<\/p>\n<h3>Deprecaci\u00f3n las Llamadas Parcialmente Soportadas<\/h3>\n<p>Otro cambio de PHP 8.2, aunque con un impacto m\u00e1s insignificante, es la <a href=\"https:\/\/wiki.php.net\/rfc\/deprecate_partially_supported_callables\">deprecaci\u00f3n de las llamadas parcialmente soportadas<\/a>.<\/p>\n<p>Estas llamadas se denominan parcialmente soportadas porque no puedes interactuar con ellas directamente a trav\u00e9s de <code>$callable()<\/code>. S\u00f3lo puedes acceder a ellas con la funci\u00f3n <code>call_user_func($callable)<\/code>. La lista de estas llamadas no es larga:<\/p>\n<pre><code class=\"language-php\">\"self::method\"\n\"parent::method\"\n\"static::method\"\n[\"self\", \"method\"]\n[\"parent\", \"method\"]\n[\"static\", \"method\"]\n[\"Foo\", \"Bar::method\"]\n[new Foo, \"Bar::method\"]<\/code><\/pre>\n<p>A partir de PHP 8.2, cualquier intento de invocar estas llamadas \u2014 por ejemplo, a trav\u00e9s de las funciones <code>call_user_func()<\/code> o <code>array_map()<\/code> \u2014 arrojar\u00e1 una advertencia de deprecaci\u00f3n.<\/p>\n<p>La RFC original ofrece un s\u00f3lido razonamiento detr\u00e1s de esta deprecaci\u00f3n:<\/p>\n<blockquote><p><em>Aparte de los dos \u00faltimos casos, todas estas llamadas dependen del contexto. El m\u00e9todo al que se refiere <code>\"self::method\"<\/code> depende de la clase desde la que se realiza la llamada o la comprobaci\u00f3n de llamabilidad. En la pr\u00e1ctica, esto suele ser v\u00e1lido tambi\u00e9n para los dos \u00faltimos casos, cuando se utiliza en la forma de <code>[new Foo, \"parent::method\"]<\/code>.<\/em><\/p>\n<p><em>Reducir la dependencia del contexto de las llamadas es el objetivo secundario de esta RFC. Despu\u00e9s de esta RFC, la \u00fanica dependencia del \u00e1mbito que queda es la visibilidad del m\u00e9todo: <code>\"Foo::bar\"<\/code> puede ser visible en un \u00e1mbito, pero no en otro. Si en el futuro las invocables se limitaran a los m\u00e9todos p\u00fablicos (mientras que los m\u00e9todos privados tendr\u00edan que utilizar invocables de primera clase o <code>Closure::fromCallable()<\/code> para ser independientes del \u00e1mbito), el tipo de invocable quedar\u00eda bien definido y podr\u00eda utilizarse como tipo de propiedad.<\/em><em>Sin embargo, los cambios en el manejo de la visibilidad no se proponen como parte de esta<\/em><\/p><\/blockquote>\n<p>RFC.<br \/>\nSeg\u00fan la RFC original, la funci\u00f3n <code>is_callable()<\/code> y el tipo <code>callable<\/code> seguir\u00e1n aceptando estas llamadas como excepciones. Pero s\u00f3lo hasta que se elimine por completo el soporte para ellas a partir de PHP 9.0.<\/p>\n<p>Para evitar confusiones, se ha <a href=\"https:\/\/wiki.php.net\/rfc\/partially-supported-callables-expand-deprecation-notices\">ampliado el alcance de este aviso de deprecaci\u00f3n con una nueva RFC<\/a>\u00a0\u2014 ahora incluye estas excepciones.<\/p>\n<p>Es bueno ver que PHP avanza hacia la existencia de un tipo <code>callable<\/code> bien definido.<\/p>\n<h3>Deprecaci\u00f3n de las Funciones <code>#utf8_encode()<\/code> y <code>utf8_decode()<\/code><\/h3>\n<p>Las funciones incorporadas de PHP <code>utf8_encode()<\/code> y <code>utf8_decode()<\/code> convierten cadenas codificadas en ISO-8859-1 (\u00abLatin 1\u00bb) a y desde UTF-8.<\/p>\n<p>Sin embargo, sus nombres sugieren un uso m\u00e1s general del que permite su implementaci\u00f3n. La codificaci\u00f3n \u00abLatin 1\u00bb se confunde com\u00fanmente con otras codificaciones como la \u00abP\u00e1gina de c\u00f3digos de Windows 1252\u00bb<\/p>\n<p>Adem\u00e1s, normalmente ver\u00e1s <a href=\"https:\/\/en.wikipedia.org\/wiki\/Mojibake\">Mojibake<\/a> cuando estas funciones no pueden convertir ninguna cadena correctamente. La falta de mensajes de error tambi\u00e9n significa que es dif\u00edcil detectarlos, especialmente dentro de un mar de texto por lo dem\u00e1s legible.<\/p>\n<p>PHP 8.2 <a href=\"https:\/\/wiki.php.net\/rfc\/remove_utf8_decode_and_utf8_encode\">deprecia las funciones <code>#utf8_encode()<\/code> y <code>utf8_decode()<\/code> <\/a>. Si las invocas, ver\u00e1s estos avisos de deprecaci\u00f3n:<\/p>\n<pre><code class=\"language-php\">Deprecated: Function utf8_encode() is deprecated\nDeprecated: Function utf8_decode() is deprecated<\/code><\/pre>\n<p>La RFC sugiere utilizar en su lugar <a href=\"https:\/\/kinqsta.com\/es\/blog\/instalar-php\/#all-about-php-extensions\">las extensiones soportadas por PHP<\/a>\u00a0como <code>mbstring<\/code>, <code>iconv<\/code>, y <code>intl<\/code>.<\/p>\n<h3>Deprecaci\u00f3n de <code>${}<\/code> Interpolaci\u00f3n de String<\/h3>\n<p>PHP permite incrustar variables en strings con comillas dobles (<code>\"<\/code>) y heredoc (<code>&lt;&lt;&lt;<\/code>) de varias maneras:<\/p>\n<ol>\n<li>Incrustando directamente las variables \u2014 <code>\u201c$foo\u201d<\/code><\/li>\n<li>Con llaves fuera de la variable \u2014 <code>\u201c{$foo}\u201d<\/code><\/li>\n<li>Con llaves despu\u00e9s del signo de d\u00f3lar \u2014 <code>\u201c${foo}\u201d<\/code><\/li>\n<li>Variables de la variable &#8211; <code>\u201c${expr}\u201d<\/code> \u2014 equivalente al uso de <code>(string) ${expr}<\/code><\/li>\n<\/ol>\n<p>Las dos primeras formas tienen sus pros y sus contras, mientras que las dos \u00faltimas tienen una sintaxis compleja y conflictiva. PHP 8.2 <a href=\"https:\/\/wiki.php.net\/rfc\/deprecate_dollar_brace_string_interpolation\">deprecacia las dos \u00faltimas formas de interpolaci\u00f3n de strings<\/a>.<\/p>\n<p>A partir de ahora, debes evitar interpolar strings de esta manera:<\/p>\n<pre><code class=\"language-php\">\"Hello, ${world}!\";\nDeprecated: Using ${} in strings is deprecated\n\n\"Hello, ${(world)}!\";\nDeprecated: Using ${} (variable variables) in strings is deprecated<\/code><\/pre>\n<p>A partir de PHP 9.0, estas deprecaciones se actualizar\u00e1n para lanzar una excepci\u00f3n de error.<\/p>\n<h3>Deprecaci\u00f3n de las Funciones mbstring para las entidades Base64\/QPrint\/Uuencode\/HTML<\/h3>\n<p>Las funciones mbstring (cadena multibyte) de PHP nos ayudan a trabajar con Unicode, entidades HTML y otras codificaciones de texto heredadas.<\/p>\n<p>Sin embargo, Base64, Uuencode y QPrint no son codificaciones de texto y siguen formando parte de estas funciones, principalmente por razones de legado. PHP tambi\u00e9n incluye implementaciones separadas de estas codificaciones.<\/p>\n<p>En cuanto a las entidades HTML, PHP tiene funciones incorporadas \u2014 <code>htmlspecialchars()<\/code> y <code>htmlentities()<\/code> \u2014 para tratarlas mejor. Por ejemplo, a diferencia de mbstring, estas funciones tambi\u00e9n convertir\u00e1n <code>&lt;<\/code>. <code>&gt;<\/code> y <code>&<\/code> en entidades HTML.<\/p>\n<p>Adem\u00e1s, PHP siempre est\u00e1 mejorando sus funciones incorporadas, <a href=\"https:\/\/kinqsta.com\/es\/blog\/php-8-1\/#html-encoding-and-decoding-functions-now-use-ent_quotes--ent_substitute\">como en PHP 8.1 con las funciones de codificaci\u00f3n y decodificaci\u00f3n de HTML<\/a>.<\/p>\n<p>As\u00ed que, teniendo todo esto en cuenta, en PHP 8.2 est\u00e1 <a href=\"https:\/\/github.com\/php\/php-src\/commit\/9308974f8cc6c1046f228be5320fe067913ba987\">deprecado el uso de mbstring para estas codificaciones<\/a> (las etiquetas no distinguen entre may\u00fasculas y min\u00fasculas):<\/p>\n<ul>\n<li>BASE64<\/li>\n<li>UUENCODE<\/li>\n<li>HTML-ENTITIES<\/li>\n<li>html (alias de HTML-ENTIDADES)<\/li>\n<li>Quoted-Printable<\/li>\n<li>qprint (alias de Quoted-Printable)<\/li>\n<\/ul>\n<p>A partir de PHP 8.2, el uso de mbstring para codificar\/decodificar cualquiera de las anteriores emitir\u00e1 un aviso de deprecaci\u00f3n. PHP 9.0 eliminar\u00e1 por completo el soporte de mbstring para estas codificaciones.<\/p>\n<h2>Otros Cambios Menores en PHP 8.2<\/h2>\n<p>Por \u00faltimo, podemos hablar de los cambios menores de PHP 8.2, incluyendo sus caracter\u00edsticas y funcionalidades eliminadas.<\/p>\n<div><\/div><kinsta-auto-toc list-style=\"none\" selector=\"h3\" count-number=\"15\" sub-toc=\"true\"><\/kinsta-auto-toc>\n<h3>Eliminaci\u00f3n del Soporte para libmysql de mysqli<\/h3>\n<p>A partir de ahora, PHP permite que los controladores <code>mysqli<\/code> y <code>PDO_mysql<\/code> construyan contra las bibliotecas <code>mysqlnd<\/code> y <code>libmysql<\/code>. Sin embargo, el controlador por defecto y recomendado desde PHP 5.4 ha sido <code>mysqlnd<\/code>.<\/p>\n<p>Ambos controladores tienen muchas ventajas y desventajas. Sin embargo, eliminar el soporte para uno de ellos \u2013 idealmente, <a href=\"https:\/\/wiki.php.net\/rfc\/mysqli_support_for_libmysql\">eliminar <code>libmysql<\/code><\/a> ya que no es el predeterminado \u2013 simplificar\u00e1 el c\u00f3digo y las pruebas unitarias de PHP.<\/p>\n<p>Para argumentar a favor, la RFC enumera muchas ventajas de <code>mysqlnd<\/code>:<\/p>\n<ul>\n<li>Est\u00e1 incluido en PHP<\/li>\n<li>Utiliza la gesti\u00f3n de memoria de PHP para controlar el uso de la memoria y<br \/>\n<a href=\"https:\/\/kinqsta.com\/es\/blog\/rendimiento-laravel\/\">mejorar el rendimiento<\/a><\/li>\n<li>Proporciona funciones de calidad de vida (por ejemplo, <code>get_result()<\/code>)<\/li>\n<li>Devuelve valores num\u00e9ricos utilizando tipos nativos de PHP<\/li>\n<li>Su funcionalidad no depende de la biblioteca externa<\/li>\n<li>Funcionalidad opcional del plugin<\/li>\n<li>Admite consultas as\u00edncronas<\/li>\n<\/ul>\n<p>La RFC tambi\u00e9n enumera algunas ventajas de <code>libmysql<\/code>, entre ellas:<\/p>\n<ul>\n<li>Es posible la reconexi\u00f3n autom\u00e1tica ( <code>mysqlnd<\/code> no soporta esta funcionalidad intencionadamente porque puede ser f\u00e1cilmente explotada)<\/li>\n<li>Modos de autenticaci\u00f3n LDAP y SASL (<code>mysqlnd<\/code> <a href=\"https:\/\/github.com\/php\/php-src\/pull\/6447\">podr\u00eda a\u00f1adir esta funci\u00f3n<\/a> tambi\u00e9n en breve)<\/li>\n<\/ul>\n<p>Adem\u00e1s, la RFC enumera muchas desventajas de <code>libmysql<\/code>: incompatibilidad con el modelo de memoria de PHP, muchas pruebas que fallan, fugas de memoria, funcionalidades diferentes entre versiones, etc.<\/p>\n<p>Teniendo todo esto en cuenta, PHP 8.2 elimin\u00f3 el soporte para construir <code>mysqli<\/code> contra <code>libmysql<\/code>.<\/p>\n<p>Si quieres a\u00f1adir alguna funcionalidad que s\u00f3lo est\u00e9 disponible con <code>libmysql<\/code>, tendr\u00e1s que a\u00f1adirla expl\u00edcitamente a<code> mysqlnd<\/code> como petici\u00f3n de funci\u00f3n. Adem\u00e1s, no puedes a\u00f1adir la reconexi\u00f3n autom\u00e1tica.<\/p>\n<h3>Conversi\u00f3n de Casos Independiente de la Localizaci\u00f3n<\/h3>\n<p>Antes de <a href=\"https:\/\/kinqsta.com\/es\/blog\/php-8\/\">PHP 8.0<\/a>, la configuraci\u00f3n regional de PHP se heredaba del entorno del sistema. Pero esto pod\u00eda causar un problema en algunos casos extremos.<\/p>\n<p>La configuraci\u00f3n del idioma durante la instalaci\u00f3n de Linux establecer\u00e1 el idioma apropiado de la interfaz de usuario para <a href=\"https:\/\/kinqsta.com\/es\/blog\/linux-comandos\/\">sus comandos incorporados<\/a>. Sin embargo, tambi\u00e9n cambia de forma inesperada el funcionamiento del manejo de strings de la biblioteca C.<\/p>\n<p>Por ejemplo, si seleccionaste el idioma \u00abturco\u00bb o \u00abkazajo\u00bb al instalar Linux, ver\u00e1s que al llamar a <code>toupper('i')<\/code> para obtener su equivalente en may\u00fasculas obtendr\u00e1s la <a href=\"https:\/\/www.wikiwand.com\/en\/%C4%B0\">I may\u00fascula con puntos<\/a> (U+0130, <code>\u0130<\/code>).<\/p>\n<p>PHP 8.0 puso fin a esta anomal\u00eda estableciendo la configuraci\u00f3n regional por defecto en \u00abC\u00bb, a menos que el usuario la cambie expl\u00edcitamente a trav\u00e9s de <code>setlocale()<\/code>.<\/p>\n<p>PHP 8.2 va incluso m\u00e1s all\u00e1 al <a href=\"https:\/\/wiki.php.net\/rfc\/strtolower-ascii\">eliminar la sensibilidad de la configuraci\u00f3n regional en las conversiones de may\u00fasculas y min\u00fasculas<\/a>. Esta RFC cambia principalmente <code>strtolower()<\/code>, <code>strtoupper()<\/code>, y las funciones relacionadas. Lee la RFC para obtener una lista de todas las funciones afectadas.<\/p>\n<p>Como alternativa, si quieres utilizar la conversi\u00f3n de may\u00fasculas y min\u00fasculas localizada, puedes utilizar <code>mb_strtolower()<\/code>.<\/p>\n<h3>Mejora de la Extensi\u00f3n Aleatoria<\/h3>\n<p>PHP est\u00e1 planeando <a href=\"https:\/\/wiki.php.net\/rfc\/rng_extension\">revisar su funcionalidad aleatoria<\/a>.<\/p>\n<p>Hasta ahora, la funcionalidad aleatoria de PHP depende en gran medida del <a href=\"https:\/\/en.wikipedia.org\/wiki\/Mersenne_Twister\">estado Mersenne Twister<\/a>. Sin embargo, este estado se almacena impl\u00edcitamente en el \u00e1rea global de PHP \u2014\u00a0no hay forma de que un usuario pueda acceder a \u00e9l. A\u00f1adir funciones de aleatorizaci\u00f3n entre la etapa de siembra inicial y el uso previsto romper\u00eda el c\u00f3digo.<\/p>\n<p>Mantener ese c\u00f3digo puede ser a\u00fan m\u00e1s complicado cuando tu c\u00f3digo utiliza paquetes externos.<\/p>\n<p>Por tanto, la funcionalidad aleatoria actual de PHP no puede reproducir valores aleatorios de forma consistente. Incluso falla en las pruebas estad\u00edsticas emp\u00edricas de los generadores de n\u00fameros aleatorios uniformes, como <a href=\"http:\/\/simul.iro.umontreal.ca\/testu01\/tu01.html\">Crush y BigCrush de TestU01<\/a>. La limitaci\u00f3n de 32 bits de Mersenne Twister lo agrava a\u00fan m\u00e1s.<\/p>\n<p>Por tanto, no se recomienda utilizar las funciones incorporadas de PHP \u2014 <code>shuffle()<\/code>, <code>str_shuffle()<\/code>, <code>array_rand()<\/code> \u2014 si necesitas n\u00fameros aleatorios criptogr\u00e1ficamente seguros. En estos casos, tendr\u00e1s que implementar una nueva funci\u00f3n utilizando <code>random_int()<\/code> o funciones similares.<\/p>\n<p>Sin embargo, se plantearon <a href=\"https:\/\/wiki.php.net\/rfc\/random_extension_improvement\">varios problemas con esta RFC<\/a> una vez iniciada la votaci\u00f3n. Este contratiempo oblig\u00f3 al equipo de PHP a anotar todas las cuestiones en una RFC separada, con una opci\u00f3n de votaci\u00f3n creada para cada cuesti\u00f3n. S\u00f3lo decidir\u00e1n si siguen adelante cuando lleguen a un consenso.<\/p>\n<h2>RFCs Adicionales en PHP 8.2<\/h2>\n<p>PHP 8.2 tambi\u00e9n incluye muchas funciones nuevas y cambios menores. Los mencionaremos a continuaci\u00f3n con enlaces a recursos adicionales:<\/p>\n<ol>\n<li><a href=\"https:\/\/github.com\/php\/php-src\/pull\/8720\">Nueva funci\u00f3n <code>curl_upkeep<\/code>:<\/a> PHP 8.2 a\u00f1ade esta nueva funci\u00f3n a su extensi\u00f3n Curl. Llama a la funci\u00f3n <code>curl_easy_upkeep()<\/code> en libcurl, la biblioteca C subyacente que utiliza la extensi\u00f3n Curl de PHP.<\/li>\n<li><a href=\"https:\/\/php.watch\/versions\/8.2\/ini_parse_quantity\">Nueva funci\u00f3n <code>ini_parse_quantity<\/code>:<\/a> Las directivas INI de PHP aceptan tama\u00f1os de datos con un sufijo multiplicador. Por ejemplo, puedes escribir 25 Megabytes como <code>25M<\/code>, o 42 Gigabytes como s\u00f3lo <code>42G<\/code>. Estos sufijos son comunes en los archivos INI de PHP, pero no son comunes en otros lugares. Esta nueva funci\u00f3n analiza los <a href=\"https:\/\/kinqsta.com\/es\/blog\/aumentar-tamano-maximo-subida-archivos-wordpress\/#create-or-modify-the-phpini-file\">valores<\/a> INI de PHP y devuelve su tama\u00f1o en bytes.<\/li>\n<li><a href=\"https:\/\/github.com\/php\/php-src\/pull\/8151\/files\">Nueva funci\u00f3n <code>memory_reset_peak_usage<\/code>:<\/a> Esta funci\u00f3n restablece el pico de uso de memoria devuelto por la funci\u00f3n <code>memory_get_peak_usage<\/code>. Puede ser \u00fatil cuando ejecutas la misma acci\u00f3n varias veces y quieres registrar el uso m\u00e1ximo de memoria de cada ejecuci\u00f3n.<\/li>\n<li><a href=\"https:\/\/github.com\/php\/php-src\/pull\/7583\">Soporte para el modificador de no captura (<code>\/n<\/code>) en las funciones de <code>preg_*<\/code>:<\/a> En regex, los metacaracteres <code>()<\/code> indican un grupo de captura. Esto significa que se devuelven todas las coincidencias de la expresi\u00f3n dentro del par\u00e9ntesis. PHP 8.2 a\u00f1ade un modificador de no captura (<code>\/n<\/code>) para detener este comportamiento.<\/li>\n<li><a href=\"https:\/\/wiki.php.net\/rfc\/iterator_xyz_accept_array\">Haz que la familia <code>iterator_*()<\/code> acepte todos los iterables<\/a>: Hasta ahora, la familia <code>iterator_*()<\/code> de PHP s\u00f3lo acepta <code>\\Traversables<\/code> (es decir, no admite arrays simples). Esto es innecesariamente limitante, y esta RFC lo soluciona.<\/li>\n<\/ol>\n<h2>Resumen<\/h2>\n<p>PHP 8.2 se basa en las enormes mejoras de PHP 8.0 y PHP 8.1, lo que no es f\u00e1cil. Creemos que las caracter\u00edsticas m\u00e1s interesantes de PHP 8.2 son sus nuevos tipos independientes, las propiedades de s\u00f3lo lectura y las numerosas mejoras de rendimiento.<\/p>\n<p>Estamos impacientes por <a href=\"https:\/\/kinqsta.com\/es\/blog\/puntos-de-referencia-php\/\">comparar PHP<\/a> 8.2 con varios <a href=\"https:\/\/kinqsta.com\/es\/blog\/frameworks-php\/\">frameworks de PHP<\/a> y <a href=\"https:\/\/kinqsta.com\/es\/cuota-de-mercado-de-wordpress\/\">CMSs.<\/a><\/p>\n<p>Aseg\u00farate de marcar esta entrada del blog para consultarla en el futuro.<\/p>\n<p><em>\u00bfQu\u00e9 caracter\u00edsticas de PHP 8.2 son tus favoritas? \u00bfQu\u00e9 depreciaciones son las que menos te gustan? Comparte tu opini\u00f3n con nuestra comunidad en los comentarios<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>PHP 8.2 se ha construido sobre la base renovada establecida por PHP 8.0 y PHP 8.1. Ahora que PHP 8.2 ya est\u00e1 disponible, vamos a analizar &#8230;<\/p>\n","protected":false},"author":117,"featured_media":56200,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[],"topic":[1317],"class_list":["post-56199","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","topic-actualizaciones-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>Novedades de PHP 8.2 - Nuevas Caracter\u00edsticas, Deprecaciones, Cambios y M\u00e1s<\/title>\n<meta name=\"description\" content=\"PHP 8.2. ya est\u00e1 disponible. Descubre todas las nuevas caracter\u00edsticas, mejoras, depreciaciones y cambios menores que vienen con la versi\u00f3n.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/kinqsta.com\/es\/blog\/php-8-2\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Novedades de PHP 8.2 - Nuevas Caracter\u00edsticas, Deprecaciones, Cambios y M\u00e1s\" \/>\n<meta property=\"og:description\" content=\"PHP 8.2. ya est\u00e1 disponible. Descubre todas las nuevas caracter\u00edsticas, mejoras, depreciaciones y cambios menores que vienen con la versi\u00f3n.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinqsta.com\/es\/blog\/php-8-2\/\" \/>\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=\"2022-08-11T12:22:59+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-08-23T09:37:49+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinqsta.com\/es\/wp-content\/uploads\/sites\/8\/2022\/08\/whats-new-in-php-82.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=\"Salman Ravoof\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:description\" content=\"PHP 8.2. ya est\u00e1 disponible. Descubre todas las nuevas caracter\u00edsticas, mejoras, depreciaciones y cambios menores que vienen con la versi\u00f3n.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinqsta.com\/es\/wp-content\/uploads\/sites\/8\/2022\/08\/whats-new-in-php-82.png\" \/>\n<meta name=\"twitter:creator\" content=\"@salmanravoof\" \/>\n<meta name=\"twitter:site\" content=\"@Kinsta_ES\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Salman Ravoof\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"19 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinqsta.com\/es\/blog\/php-8-2\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinqsta.com\/es\/blog\/php-8-2\/\"},\"author\":{\"name\":\"Salman Ravoof\",\"@id\":\"https:\/\/kinqsta.com\/es\/#\/schema\/person\/9cafd2eedd617e640eeea4cf3a5fd987\"},\"headline\":\"Novedades de PHP 8.2 &#8211; Nuevas Caracter\u00edsticas, Deprecaciones, Cambios y M\u00e1s\",\"datePublished\":\"2022-08-11T12:22:59+00:00\",\"dateModified\":\"2023-08-23T09:37:49+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinqsta.com\/es\/blog\/php-8-2\/\"},\"wordCount\":3719,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinqsta.com\/es\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinqsta.com\/es\/blog\/php-8-2\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinqsta.com\/es\/wp-content\/uploads\/sites\/8\/2022\/08\/whats-new-in-php-82.png\",\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinqsta.com\/es\/blog\/php-8-2\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinqsta.com\/es\/blog\/php-8-2\/\",\"url\":\"https:\/\/kinqsta.com\/es\/blog\/php-8-2\/\",\"name\":\"Novedades de PHP 8.2 - Nuevas Caracter\u00edsticas, Deprecaciones, Cambios y M\u00e1s\",\"isPartOf\":{\"@id\":\"https:\/\/kinqsta.com\/es\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinqsta.com\/es\/blog\/php-8-2\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinqsta.com\/es\/blog\/php-8-2\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinqsta.com\/es\/wp-content\/uploads\/sites\/8\/2022\/08\/whats-new-in-php-82.png\",\"datePublished\":\"2022-08-11T12:22:59+00:00\",\"dateModified\":\"2023-08-23T09:37:49+00:00\",\"description\":\"PHP 8.2. ya est\u00e1 disponible. Descubre todas las nuevas caracter\u00edsticas, mejoras, depreciaciones y cambios menores que vienen con la versi\u00f3n.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinqsta.com\/es\/blog\/php-8-2\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinqsta.com\/es\/blog\/php-8-2\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/kinqsta.com\/es\/blog\/php-8-2\/#primaryimage\",\"url\":\"https:\/\/kinqsta.com\/es\/wp-content\/uploads\/sites\/8\/2022\/08\/whats-new-in-php-82.png\",\"contentUrl\":\"https:\/\/kinqsta.com\/es\/wp-content\/uploads\/sites\/8\/2022\/08\/whats-new-in-php-82.png\",\"width\":1460,\"height\":730},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinqsta.com\/es\/blog\/php-8-2\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinqsta.com\/es\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Actualizaciones de PHP\",\"item\":\"https:\/\/kinqsta.com\/es\/secciones\/actualizaciones-php\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Novedades de PHP 8.2 &#8211; Nuevas Caracter\u00edsticas, Deprecaciones, Cambios y M\u00e1s\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinqsta.com\/es\/#website\",\"url\":\"https:\/\/kinqsta.com\/es\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Soluciones de alojamiento premium, r\u00e1pidas y seguras\",\"publisher\":{\"@id\":\"https:\/\/kinqsta.com\/es\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinqsta.com\/es\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinqsta.com\/es\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinqsta.com\/es\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/kinqsta.com\/es\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinqsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinqsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinqsta.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:\/\/kinqsta.com\/es\/#\/schema\/person\/9cafd2eedd617e640eeea4cf3a5fd987\",\"name\":\"Salman Ravoof\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/kinqsta.com\/es\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/0c5885f75cb78473fb7408e5e49ad190?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/0c5885f75cb78473fb7408e5e49ad190?s=96&d=mm&r=g\",\"caption\":\"Salman Ravoof\"},\"description\":\"Salman Ravoof is a self-taught web developer, writer, creator, and a huge admirer of Free and Open Source Software (FOSS). Besides tech, he's excited by science, philosophy, photography, arts, cats, and food. Learn more about him on his website, and connect with Salman on Twitter.\",\"sameAs\":[\"https:\/\/salmanravoof.com\",\"https:\/\/www.linkedin.com\/in\/salman-ravoof-5a749133\/\",\"https:\/\/x.com\/salmanravoof\"],\"url\":\"https:\/\/kinqsta.com\/es\/blog\/author\/salmanravoof\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Novedades de PHP 8.2 - Nuevas Caracter\u00edsticas, Deprecaciones, Cambios y M\u00e1s","description":"PHP 8.2. ya est\u00e1 disponible. Descubre todas las nuevas caracter\u00edsticas, mejoras, depreciaciones y cambios menores que vienen con la versi\u00f3n.","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:\/\/kinqsta.com\/es\/blog\/php-8-2\/","og_locale":"es_ES","og_type":"article","og_title":"Novedades de PHP 8.2 - Nuevas Caracter\u00edsticas, Deprecaciones, Cambios y M\u00e1s","og_description":"PHP 8.2. ya est\u00e1 disponible. Descubre todas las nuevas caracter\u00edsticas, mejoras, depreciaciones y cambios menores que vienen con la versi\u00f3n.","og_url":"https:\/\/kinqsta.com\/es\/blog\/php-8-2\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/kinsta.es\/","article_published_time":"2022-08-11T12:22:59+00:00","article_modified_time":"2023-08-23T09:37:49+00:00","og_image":[{"width":1460,"height":730,"url":"https:\/\/kinqsta.com\/es\/wp-content\/uploads\/sites\/8\/2022\/08\/whats-new-in-php-82.png","type":"image\/png"}],"author":"Salman Ravoof","twitter_card":"summary_large_image","twitter_description":"PHP 8.2. ya est\u00e1 disponible. Descubre todas las nuevas caracter\u00edsticas, mejoras, depreciaciones y cambios menores que vienen con la versi\u00f3n.","twitter_image":"https:\/\/kinqsta.com\/es\/wp-content\/uploads\/sites\/8\/2022\/08\/whats-new-in-php-82.png","twitter_creator":"@salmanravoof","twitter_site":"@Kinsta_ES","twitter_misc":{"Escrito por":"Salman Ravoof","Tiempo de lectura":"19 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinqsta.com\/es\/blog\/php-8-2\/#article","isPartOf":{"@id":"https:\/\/kinqsta.com\/es\/blog\/php-8-2\/"},"author":{"name":"Salman Ravoof","@id":"https:\/\/kinqsta.com\/es\/#\/schema\/person\/9cafd2eedd617e640eeea4cf3a5fd987"},"headline":"Novedades de PHP 8.2 &#8211; Nuevas Caracter\u00edsticas, Deprecaciones, Cambios y M\u00e1s","datePublished":"2022-08-11T12:22:59+00:00","dateModified":"2023-08-23T09:37:49+00:00","mainEntityOfPage":{"@id":"https:\/\/kinqsta.com\/es\/blog\/php-8-2\/"},"wordCount":3719,"commentCount":0,"publisher":{"@id":"https:\/\/kinqsta.com\/es\/#organization"},"image":{"@id":"https:\/\/kinqsta.com\/es\/blog\/php-8-2\/#primaryimage"},"thumbnailUrl":"https:\/\/kinqsta.com\/es\/wp-content\/uploads\/sites\/8\/2022\/08\/whats-new-in-php-82.png","inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinqsta.com\/es\/blog\/php-8-2\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinqsta.com\/es\/blog\/php-8-2\/","url":"https:\/\/kinqsta.com\/es\/blog\/php-8-2\/","name":"Novedades de PHP 8.2 - Nuevas Caracter\u00edsticas, Deprecaciones, Cambios y M\u00e1s","isPartOf":{"@id":"https:\/\/kinqsta.com\/es\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinqsta.com\/es\/blog\/php-8-2\/#primaryimage"},"image":{"@id":"https:\/\/kinqsta.com\/es\/blog\/php-8-2\/#primaryimage"},"thumbnailUrl":"https:\/\/kinqsta.com\/es\/wp-content\/uploads\/sites\/8\/2022\/08\/whats-new-in-php-82.png","datePublished":"2022-08-11T12:22:59+00:00","dateModified":"2023-08-23T09:37:49+00:00","description":"PHP 8.2. ya est\u00e1 disponible. Descubre todas las nuevas caracter\u00edsticas, mejoras, depreciaciones y cambios menores que vienen con la versi\u00f3n.","breadcrumb":{"@id":"https:\/\/kinqsta.com\/es\/blog\/php-8-2\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinqsta.com\/es\/blog\/php-8-2\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/kinqsta.com\/es\/blog\/php-8-2\/#primaryimage","url":"https:\/\/kinqsta.com\/es\/wp-content\/uploads\/sites\/8\/2022\/08\/whats-new-in-php-82.png","contentUrl":"https:\/\/kinqsta.com\/es\/wp-content\/uploads\/sites\/8\/2022\/08\/whats-new-in-php-82.png","width":1460,"height":730},{"@type":"BreadcrumbList","@id":"https:\/\/kinqsta.com\/es\/blog\/php-8-2\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinqsta.com\/es\/"},{"@type":"ListItem","position":2,"name":"Actualizaciones de PHP","item":"https:\/\/kinqsta.com\/es\/secciones\/actualizaciones-php\/"},{"@type":"ListItem","position":3,"name":"Novedades de PHP 8.2 &#8211; Nuevas Caracter\u00edsticas, Deprecaciones, Cambios y M\u00e1s"}]},{"@type":"WebSite","@id":"https:\/\/kinqsta.com\/es\/#website","url":"https:\/\/kinqsta.com\/es\/","name":"Kinsta\u00ae","description":"Soluciones de alojamiento premium, r\u00e1pidas y seguras","publisher":{"@id":"https:\/\/kinqsta.com\/es\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinqsta.com\/es\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Organization","@id":"https:\/\/kinqsta.com\/es\/#organization","name":"Kinsta","url":"https:\/\/kinqsta.com\/es\/","logo":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/kinqsta.com\/es\/#\/schema\/logo\/image\/","url":"https:\/\/kinqsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinqsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinqsta.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:\/\/kinqsta.com\/es\/#\/schema\/person\/9cafd2eedd617e640eeea4cf3a5fd987","name":"Salman Ravoof","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/kinqsta.com\/es\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/0c5885f75cb78473fb7408e5e49ad190?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/0c5885f75cb78473fb7408e5e49ad190?s=96&d=mm&r=g","caption":"Salman Ravoof"},"description":"Salman Ravoof is a self-taught web developer, writer, creator, and a huge admirer of Free and Open Source Software (FOSS). Besides tech, he's excited by science, philosophy, photography, arts, cats, and food. Learn more about him on his website, and connect with Salman on Twitter.","sameAs":["https:\/\/salmanravoof.com","https:\/\/www.linkedin.com\/in\/salman-ravoof-5a749133\/","https:\/\/x.com\/salmanravoof"],"url":"https:\/\/kinqsta.com\/es\/blog\/author\/salmanravoof\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinqsta.com\/es\/wp-json\/wp\/v2\/posts\/56199","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinqsta.com\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinqsta.com\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinqsta.com\/es\/wp-json\/wp\/v2\/users\/117"}],"replies":[{"embeddable":true,"href":"https:\/\/kinqsta.com\/es\/wp-json\/wp\/v2\/comments?post=56199"}],"version-history":[{"count":15,"href":"https:\/\/kinqsta.com\/es\/wp-json\/wp\/v2\/posts\/56199\/revisions"}],"predecessor-version":[{"id":61302,"href":"https:\/\/kinqsta.com\/es\/wp-json\/wp\/v2\/posts\/56199\/revisions\/61302"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinqsta.com\/es\/wp-json\/kinsta\/v1\/posts\/56199\/translations\/en"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinqsta.com\/es\/wp-json\/kinsta\/v1\/posts\/56199\/translations\/pt"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinqsta.com\/es\/wp-json\/kinsta\/v1\/posts\/56199\/translations\/fr"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinqsta.com\/es\/wp-json\/kinsta\/v1\/posts\/56199\/translations\/it"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinqsta.com\/es\/wp-json\/kinsta\/v1\/posts\/56199\/translations\/de"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinqsta.com\/es\/wp-json\/kinsta\/v1\/posts\/56199\/translations\/es"},{"embeddable":true,"hreflang":"ja","title":"Japanese","href":"https:\/\/kinqsta.com\/es\/wp-json\/kinsta\/v1\/posts\/56199\/translations\/jp"},{"embeddable":true,"hreflang":"nl","title":"Dutch","href":"https:\/\/kinqsta.com\/es\/wp-json\/kinsta\/v1\/posts\/56199\/translations\/nl"},{"embeddable":true,"hreflang":"da","title":"Danish","href":"https:\/\/kinqsta.com\/es\/wp-json\/kinsta\/v1\/posts\/56199\/translations\/dk"},{"embeddable":true,"hreflang":"sv","title":"Swedish","href":"https:\/\/kinqsta.com\/es\/wp-json\/kinsta\/v1\/posts\/56199\/translations\/se"},{"href":"https:\/\/kinqsta.com\/es\/wp-json\/kinsta\/v1\/posts\/56199\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinqsta.com\/es\/wp-json\/wp\/v2\/media\/56200"}],"wp:attachment":[{"href":"https:\/\/kinqsta.com\/es\/wp-json\/wp\/v2\/media?parent=56199"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinqsta.com\/es\/wp-json\/wp\/v2\/tags?post=56199"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinqsta.com\/es\/wp-json\/wp\/v2\/topic?post=56199"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}