{"id":72051,"date":"2023-11-29T08:25:00","date_gmt":"2023-11-29T07:25:00","guid":{"rendered":"https:\/\/kinsta.com\/es\/?p=72051&#038;preview=true&#038;preview_id=72051"},"modified":"2023-12-04T12:08:37","modified_gmt":"2023-12-04T11:08:37","slug":"php-8-3","status":"publish","type":"post","link":"https:\/\/kinsta.com\/es\/blog\/php-8-3\/","title":{"rendered":"PHP 8.3: Novedades y Cambios de la \u00daltima Versi\u00f3n"},"content":{"rendered":"<p>PHP 8.3 se public\u00f3 seg\u00fan lo previsto el 23 de noviembre y contiene muchas nuevas funciones y mejoras desde el <a href=\"https:\/\/kinsta.com\/es\/blog\/php-8-2\/\">lanzamiento de PHP 8.2<\/a>. Aunque oficialmente se considera una versi\u00f3n menor, algunos de los cambios de la 8.3 podr\u00edan afectar directamente a tu trabajo con PHP, quiz\u00e1s ayud\u00e1ndote a programar m\u00e1s r\u00e1pido y con menos errores.<\/p>\n<p>Echemos un vistazo a los grandes \u2014 y a veces no tan grandes \u2014 cambios de esta \u00faltima versi\u00f3n.<\/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 Funciones y Mejoras en PHP 8.3<\/h2>\n<p>Empecemos explorando las caracter\u00edsticas de PHP 8.3 que acaparan la mayor\u00eda de los titulares.<\/p>\n<div><\/div><kinsta-auto-toc list-style=\"disc\" selector=\"h3\" count-number=\"-1\" sub-toc=\"true\"><\/kinsta-auto-toc>\n<h3>Constantes de Clase Tipadas<\/h3>\n<p>La posibilidad de declarar tipos para las propiedades de las clases est\u00e1 disponible desde <a href=\"https:\/\/kinsta.com\/es\/blog\/php-7-4\/\">PHP 7.4<\/a>. Sin embargo, a pesar de los numerosos ajustes en la tipificaci\u00f3n de PHP a lo largo de los a\u00f1os, no se ha extendido a las constantes \u2014 hasta ahora.<\/p>\n<p>Las constantes de clase \u2014 y eso incluye tambi\u00e9n las constantes de interfaz, traits y enum \u2014\u00a0 \u00a0se pueden tipar en PHP 8.3, lo que hace menos probable que los desarrolladores se desv\u00eden de la intenci\u00f3n que hay detr\u00e1s de la declaraci\u00f3n inicial de una constante.<\/p>\n<p>Aqu\u00ed hay un ejemplo b\u00e1sico utilizando una interfaz:<\/p>\n<pre><code class=\"language-php\">\/\/ Legal:\ninterface ConstTest {\n    \/\/ Declared type and value are both strings\n    const string VERSION = \"PHP 8.3\";\n}\n\n\/\/ Illegal:\ninterface ConstTest {\n    \/\/ Type and value mismatch in this initial declaration\n    const float VERSION = \"PHP 8.3\";\n}<\/code><\/pre>\n<p>El valor real de esas<a href=\"https:\/\/wiki.php.net\/rfc\/typed_class_constants\"> constantes de clase tipadas<\/a> se revela cuando se trabaja en clases derivadas de las declaraciones base. Aunque una clase derivada puede asignar con frecuencia un nuevo valor a una constante, PHP 8.3 puede ayudar a evitar que se cambie accidentalmente su tipo de modo que resulte incompatible con la declaraci\u00f3n inicial:<\/p>\n<pre><code class=\"language-php\">class ConstTest {\n    const string VERSION = \"PHP 8.2\";\n}\n\nclass MyConstTest extends ConstTest {\n\n    \/\/ Legal:\n    \/\/ It's OK to change the value of VERSION here\n    const string VERSION = \"PHP 8.3\";\n\n    \/\/ Illegal:\n    \/\/ Type must be declared if it was specified in the base class\n    const VERSION = \"PHP 8.3\";\n\n    \/\/ Illegal:\n    \/\/ In this case, we can't change the type declared in the \n    \/\/ base class, even if the new type and its value are compatible.\n    const float VERSION = 8.3;\n}<\/code><\/pre>\n<p>Ten en cuenta que el tipo asignado a una constante de clase puede variar cuando se \u00abestrechan\u00bb varios tipos o se utiliza un tipo por lo dem\u00e1s compatible:<\/p>\n<pre><code class=\"language-php\">class ConstTest {\n    const string|float VERSION = \"PHP 8.2\";\n}\n\nclass MyConstTest extends ConstTest {\n\n    \/\/ Legal:\n    \/\/ Here, it's OK to narrow the type declaration to string or float\n    const string VERSION = \"PHP 8.3\";\n    const float VERSION = 8.3;\n\n    \/\/ Legal:\n    \/\/ Value could be an int, but it's compatible with float \n    const float VERSION = 8;\n\n    \/\/ Illegal:\n    \/\/ We can't widen the type options here to include int\n    const string|float|int VERSION = 8;\n}<\/code><\/pre>\n<p>Dos tipos admitidos para otras propiedades al validar valores de retorno &#8211; <code>void<\/code> y <code>never<\/code> &#8211; no se admiten como tipos de constante de clase.<\/p>\n<h3>Una Nueva Funci\u00f3n <code>json_validate()<\/code><\/h3>\n<p>Cuando se trabaja con datos codificados en JSON, es bueno saber si la carga \u00fatil es sint\u00e1cticamente v\u00e1lida antes de intentar hacer algo con ella.<\/p>\n<p>En versiones anteriores de PHP, los desarrolladores han utilizado la funci\u00f3n <code>json_decode()<\/code> y han comprobado si hab\u00eda errores mientras esa funci\u00f3n intentaba convertir los datos JSON en arrays asociativas u objetos. La nueva funci\u00f3n <code><a href=\"https:\/\/www.php.net\/manual\/en\/function.json-validate.php\" target=\"_blank\" rel=\"noopener noreferrer\">json_validate()<\/a><\/code> realiza la comprobaci\u00f3n de errores sin utilizar toda la memoria necesaria para construir esas estructuras de arrays u objetos.<\/p>\n<p>As\u00ed que, en el pasado, en el pasado, podr\u00edas haber validado una carga \u00fatil JSON similar a \u00e9sta:<\/p>\n<pre><code class=\"language-php\">$obj = json_decode($maybeJSON);\n\nif (json_last_error() === JSON_ERROR_NONE) {\n    \/\/ Probably do something with $obj   \n}<\/code><\/pre>\n<p>Si no vas a hacer algo inmediatamente con <code>$obj<\/code> en el ejemplo anterior, eso son muchos recursos utilizados s\u00f3lo para confirmar la validez de la carga \u00fatil JSON original. En PHP 8.3, puedes hacer algo como esto y ahorrar algo de memoria:<\/p>\n<pre><code class=\"language-php\">if (json_validate($maybeJSON)) {\n    \/\/ Do something with $maybeJSON   \n}<\/code><\/pre>\n<p><strong>Nota:<\/strong> De todos modos, no tiene mucho sentido utilizar <code>json_validate()<\/code> y luego pasar inmediatamente los datos por <code>json_decode()<\/code>, utilizando los recursos de memoria de la descodificaci\u00f3n. Es m\u00e1s probable que utilices la nueva funci\u00f3n para validar el JSON antes de almacenarlo en alg\u00fan sitio o entregarlo como respuesta a una solicitud.<\/p>\n<h3>Clonaci\u00f3n Profunda de Propiedades <code>readonly<\/code><\/h3>\n<p>La capacidad de declarar propiedades de clase individuales como <code>readonly<\/code> apareci\u00f3 en <a href=\"https:\/\/kinsta.com\/es\/blog\/php-8-1\/\">PHP 8.1<\/a>. PHP 8.2 introdujo la posibilidad de asignar ese atributo a <a href=\"https:\/\/kinsta.com\/es\/blog\/php-8-2\/#new-readonly-classes\">toda una clase<\/a>. Sin embargo, muchos desarrolladores consideraban que las restricciones impuestas al trabajar con clases que conten\u00edan dichas propiedades obstaculizaban una programaci\u00f3n \u00fatil.<\/p>\n<p>Una RFC para <a href=\"https:\/\/wiki.php.net\/rfc\/readonly_amendments\" target=\"_blank\" rel=\"noopener noreferrer\">modificar el comportamiento de <code>readonly<\/code><\/a> hizo dos propuestas:<\/p>\n<ol>\n<li>Permitir que las clases que no son <code>readonly<\/code> extiendan a las clases que s\u00ed lo son<\/li>\n<li>Permitir que las propiedades de <code>readonly<\/code> se reinicien al clonar<\/li>\n<\/ol>\n<p>Es la segunda propuesta la que ha llegado a PHP 8.3. El nuevo enfoque permite que las instancias de una clase con propiedades <code>readonly<\/code> se reinicien dentro del m\u00e9todo m\u00e1gico <code>__clone<\/code> (incluso a trav\u00e9s de funciones invocadas desde dentro de <code>__clone<\/code>).<\/p>\n<p>Este ejemplo de c\u00f3digo de la RFC muestra c\u00f3mo funciona:<\/p>\n<pre><code class=\"language-php\">class Foo {\n    public function __construct(\n        public readonly DateTime $bar,\n        public readonly DateTime $baz\n    ) {}\n \n    public function __clone() {\n        \/\/ $bar will get a new DateTime when clone is invoked\n        $this-&gt;bar = clone $this-&gt;bar; \n\n        \/\/ And this function will be called\n        $this-&gt;cloneBaz();\n    }\n \n    private function cloneBaz() {\n       \/\/ This is legal when called from within __clone\n        unset($this-&gt;baz); \n    }\n}\n \n$foo = new Foo(new DateTime(), new DateTime());\n$foo2 = clone $foo;<\/code><\/pre>\n<h3>Nuevo Atributo <code>#[\\Override]<\/code><\/h3>\n<p>Al implementar interfaces en PHP, los programadores proporcionan funcionalidad detallada para los m\u00e9todos nombrados en esas interfaces. Al crear una instancia de una clase, los programadores pueden anular un m\u00e9todo padre creando una versi\u00f3n alternativa con el mismo nombre y una firma compatible en el hijo.<\/p>\n<p>Uno de los problemas es que los programadores pueden <em>pensar<\/em> que est\u00e1n implementando un m\u00e9todo de la interfaz o anulando un m\u00e9todo padre, cuando no es as\u00ed. Podr\u00edan estar creando una bestia completamente distinta debido a un error tipogr\u00e1fico en el nombre del m\u00e9todo de la clase hija o porque se han eliminado o renombrado m\u00e9todos en el c\u00f3digo padre.<\/p>\n<p>PHP 8.3 introduce el atributo <code>#[\\Override]<\/code> para ayudar a los programadores a dejar claro que un m\u00e9todo debe tener alg\u00fan linaje dentro del c\u00f3digo.<\/p>\n<p>Aqu\u00ed hay un ejemplo b\u00e1sico:<\/p>\n<pre><code class=\"language-php\">class A {\n    protected function ovrTest(): void {}\n}\n\n\/\/ This will work because ovrTest() \n\/\/ can be found in the parent class\nclass B extends A {\n    #[\\Override]\n    public function ovrTest(): void {}\n}\n\n\/\/ This will fail because ovrBest() \n\/\/ (probably a typo) is not in the parent\nclass C extends A {\n    #[\\Override]\n    public function ovrBest(): void {}\n}<\/code><\/pre>\n<h3>Obtenci\u00f3n Din\u00e1mica de Constantes de Clase y Miembros de Enum<\/h3>\n<p>A diferencia de lo que ocurre con otras propiedades en el c\u00f3digo PHP, la obtenci\u00f3n de constantes de clase y miembros de Enum con nombres de variables ha sido un poco enrevesada. Antes de PHP 8.3, puede que lo hicieras utilizando la funci\u00f3n <code>constant()<\/code> de esta forma:<\/p>\n<pre><code class=\"language-php\">class MyClass {\n    public const THE_CONST = 9;\n}\n\nenum MyEnum int {\n    case FirstMember = 9;\n    case SecondMember = 9;\n}\n\n$constantName = 'THE_CONST';\n$memberName = 'FirstMember';\n\necho constant('MyClass::' . $constantName);\necho constant('MyEnum::' . $memberName)-&gt;value;<\/code><\/pre>\n<p>Ahora, utilizando las mismas definiciones de clase y Enum anteriores, puedes conseguir el mismo resultado con la <a href=\"https:\/\/wiki.php.net\/rfc\/dynamic_class_constant_fetch\">obtenci\u00f3n din\u00e1mica de constantes<\/a> de PHP 8.3 de esta forma:<\/p>\n<pre><code class=\"language-php\">$constantName = 'THE_CONST';\n$memberName = 'FirstMember';\n\necho MyClass::{$constantName};\necho MyEnum::{$memberName}-&gt;value;<\/code><\/pre>\n<h3>Nuevo M\u00e9todo <code>getBytesFromString()<\/code><\/h3>\n<p>\u00bfAlguna vez has querido generar cadenas aleatorias utilizando una colecci\u00f3n preaprobada de caracteres? Ahora puedes hacerlo f\u00e1cilmente con el m\u00e9todo <code><a href=\"https:\/\/www.php.net\/manual\/en\/random-randomizer.getbytesfromstring.php\" target=\"_blank\" rel=\"noopener noreferrer\">getBytesFromString()<\/a><\/code> que se ha a\u00f1adido a la extensi\u00f3n Random en PHP 8.3.<\/p>\n<p>Este nuevo m\u00e9todo es sencillo: le pasas una cadena de caracteres como material de origen y especificas cu\u00e1ntos de ellos quieres utilizar. A continuaci\u00f3n, el m\u00e9todo seleccionar\u00e1 bytes de la cadena de forma aleatoria hasta que alcance esa longitud especificada.<\/p>\n<p>Aqu\u00ed tienes un ejemplo sencillo:<\/p>\n<pre><code class=\"language-php\">$rando = new Random\\Randomizer();\n$alpha = 'ABCDEFGHJKMNPQRSTVWXYZ';\n\n$rando-&gt;getBytesFromString($alpha, 6); \/\/  \"MBXGWL\"\n$rando-&gt;getBytesFromString($alpha, 6); \/\/  \"LESPMG\"\n$rando-&gt;getBytesFromString($alpha, 6); \/\/  \"NVHWXC\"<\/code><\/pre>\n<p>Es posible que la longitud solicitada de la salida aleatoria tenga m\u00e1s bytes que la cadena de entrada:<\/p>\n<pre><code class=\"language-php\">$rando = new Random\\Randomizer();\n$nums = '123456';\n\n$rando-&gt;getBytesFromString($nums, 10); \/\/  \"2526341615\"<\/code><\/pre>\n<p>Con una cadena de entrada de caracteres \u00fanicos, cada uno tiene la misma probabilidad de ser seleccionado para el resultado aleatorio. Sin embargo, los caracteres se pueden ponderar haciendo que aparezcan m\u00e1s a menudo que otros en la entrada. Por ejemplo:<\/p>\n<pre><code class=\"language-php\">$rando = new Random\\Randomizer();\n$weighted = 'AAAAA12345';\n\n$rando-&gt;getBytesFromString($weighted, 5); \/\/  \"1AA53\"\n$rando-&gt;getBytesFromString($weighted, 10); \/\/  \"42A5A1AA3A\"<\/code><\/pre>\n<h3>Nuevos M\u00e9todos <code>getFloat()<\/code> y <code>nextFloat()<\/code><\/h3>\n<p>Ampliando tambi\u00e9n la extensi\u00f3n Random, PHP 8.3 introduce dos nuevos m\u00e9todos para generar valores flotantes aleatorios: <code>getFloat()<\/code> y <code>nextFloat()<\/code>.<\/p>\n<p>Aqu\u00ed hay un ejemplo:<\/p>\n<pre><code class=\"language-php\">$rando = new Random\\Randomizer();\n\n\/\/ Generate a float value between a minimum \n\/\/  value of 0 and a maximum value of 5\n$rando-&gt;getFloat(0,5); \/\/ 2.3937446906217<\/code><\/pre>\n<p>El m\u00e9todo <code>getFloat()<\/code> tambi\u00e9n acepta un tercer par\u00e1metro despu\u00e9s de los valores m\u00ednimo y m\u00e1ximo. Utilizando un Enum <strong>Random\\IntervalBoundary<\/strong> puedes determinar si los propios valores m\u00ednimo y m\u00e1ximo pueden ser devueltos por la funci\u00f3n.<\/p>\n<p>\u00c9stas son las reglas:<\/p>\n<ul>\n<li>IntervalBoundary::ClosedOpen: puede devolverse el m\u00ednimo, pero no el m\u00e1ximo<\/li>\n<li>IntervalBoundary::ClosedClosed: se pueden devolver tanto el m\u00edn. como el m\u00e1x<\/li>\n<li>IntervalBoundary::OpenClosed: no puede devolverse el m\u00ednimo, pero s\u00ed el m\u00e1ximo<\/li>\n<li>IntervalBoundary::OpenOpen: no puede devolverse ni el m\u00ednimo ni el m\u00e1ximo<\/li>\n<\/ul>\n<p>Cuando se utiliza <code>getFloat()<\/code> sin especificar el Enum como tercer par\u00e1metro, el valor por defecto es <strong>IntervalBoundary::ClosedOpen<\/strong>.<\/p>\n<p>Un ejemplo \u00fatil proporcionado por la <a href=\"https:\/\/www.php.net\/manual\/en\/random-randomizer.getfloat.php\" target=\"_blank\" rel=\"noopener noreferrer\">documentaci\u00f3n de la nueva<\/a> funci\u00f3n genera coordenadas aleatorias de longitud y latitud, donde las latitudes pueden incluir -90 y 90, pero la longitud no puede incluir -180 y 180 (ya que son iguales):<\/p>\n<pre><code class=\"language-php\">$rando = new Random\\Randomizer();\n\nprintf(\n    \"Lat: %+.6f Long: %+.6f\",\n    $rando-&gt;getFloat(-90, 90, \\Random\\IntervalBoundary::ClosedClosed),\n\n    \/\/ -180 will not be used \n    $rando-&gt;getFloat(-180, 180, \\Random\\IntervalBoundary::OpenClosed),\n);<\/code><\/pre>\n<p>El nuevo m\u00e9todo <code>nextFloat()<\/code> es esencialmente lo mismo que utilizar <code>getFloat()<\/code> para solicitar un valor aleatorio que vaya de 0 a menos de 1:<\/p>\n<pre><code class=\"language-php\">$rando = new Random\\Randomizer();\n\n$rando-&gt;nextFloat(); \/\/ 0.3767414902847<\/code><\/pre>\n<h2>Otros Cambios Menores en PHP 8.3<\/h2>\n<p>PHP 8.3 tambi\u00e9n incluye otras funciones nuevas y cambios menores. Los mencionaremos a continuaci\u00f3n con enlaces a recursos adicionales (cuando est\u00e9n disponibles):<\/p>\n<ul>\n<li>Nuevos m\u00e9todos para la clase DOMElement: <a href=\"https:\/\/www.php.net\/manual\/en\/domelement.getattributenames.php\" target=\"_blank\" rel=\"noopener noreferrer\"><code>DOMElement::getAttributeNames()<\/code><\/a>, <a href=\"https:\/\/www.php.net\/manual\/en\/domelement.insertadjacentelement.php\" target=\"_blank\" rel=\"noopener noreferrer\"><code>DOMElement::insertAdjacentElement()<\/code><\/a>, <a href=\"https:\/\/www.php.net\/manual\/en\/domelement.insertadjacenttext.php\" target=\"_blank\" rel=\"noopener noreferrer\"><code>DOMElement::insertAdjacentText()<\/code><\/a>, <a href=\"https:\/\/www.php.net\/manual\/en\/domelement.toggleattribute.php\" target=\"_blank\" rel=\"noopener noreferrer\"><code>DOMElement::toggleAttribute()<\/code><\/a>, <a href=\"https:\/\/www.php.net\/manual\/en\/domnode.contains.php\" target=\"_blank\" rel=\"noopener noreferrer\"><code>DOMNode::contains()<\/code><\/a>, <a href=\"https:\/\/www.php.net\/manual\/en\/domnode.getrootnode.php\" target=\"_blank\" rel=\"noopener noreferrer\"><code>DOMNode::getRootNode()<\/code><\/a>,<a href=\"https:\/\/www.php.net\/manual\/en\/domnode.isequalnode.php\" target=\"_blank\" rel=\"noopener noreferrer\"><code> DOMNode::isEqualNode()<\/code><\/a>dOMNameSpaceNode::contains(), y <a href=\"https:\/\/www.php.net\/manual\/en\/domparentnode.replacechildren.php\" target=\"_blank\" rel=\"noopener noreferrer\"><code>MParentNode::replaceChildren()<\/code><\/a>.<\/li>\n<li>Nuevos m\u00e9todos para la clase IntlCalendar: <a href=\"https:\/\/www.php.net\/manual\/en\/intlcalendar.setdate.php\" target=\"_blank\" rel=\"noopener noreferrer\"><code>IntlCalendar::setDate()<\/code><\/a>, <a href=\"https:\/\/www.php.net\/manual\/en\/intlcalendar.setdatetime.php\" target=\"_blank\" rel=\"noopener noreferrer\"><code>IntlCalendar::setDateTime()<\/code><\/a>, <a href=\"https:\/\/www.php.net\/manual\/en\/intlgregoriancalendar.createfromdate.php\" target=\"_blank\" rel=\"noopener noreferrer\"><code>IntlGregorianCalendar::createFromDate()<\/code><\/a>y <a href=\"https:\/\/www.php.net\/manual\/en\/intlgregoriancalendar.createfromdatetime.php\" target=\"_blank\" rel=\"noopener noreferrer\"><code>IntlGregorianCalendar::createFromDateTime()<\/code><\/a>.<\/li>\n<li>Nuevas funciones LDAP: ldap_connect_wallet() y ldap_exop_sync().<\/li>\n<li>Nuevo <a href=\"https:\/\/www.php.net\/manual\/en\/function.mb-str-pad.php\" target=\"_blank\" rel=\"noopener noreferrer\"><code>mb_str_pad()<\/code><\/a> funci\u00f3n cadena multibyte.<\/li>\n<li>Nuevas funciones POSIX: <a href=\"https:\/\/www.php.net\/manual\/en\/function.posix-sysconf.php\" target=\"_blank\" rel=\"noopener noreferrer\"><code>posix_sysconf()<\/code><\/a>, <a href=\"https:\/\/www.php.net\/manual\/en\/function.posix-pathconf.php\" target=\"_blank\" rel=\"noopener noreferrer\"><code>posix_pathconf()<\/code><\/a>, <a href=\"https:\/\/www.php.net\/manual\/en\/function.posix-fpathconf.php\" target=\"_blank\" rel=\"noopener noreferrer\"><code>posix_fpathconf()<\/code><\/a>y <a href=\"https:\/\/www.php.net\/manual\/en\/function.posix-eaccess.php\" target=\"_blank\" rel=\"noopener noreferrer\"><code>posix_eaccess()<\/code><\/a>.<\/li>\n<li>Nuevo m\u00e9todo <a href=\"https:\/\/www.php.net\/manual\/en\/reflectionmethod.createfrommethodname.php\" target=\"_blank\" rel=\"noopener noreferrer\"><code>ReflectionMethod::createFromMethodName()<\/code><\/a> m\u00e9todo.<\/li>\n<li>Nueva funci\u00f3n de socket: <a href=\"https:\/\/www.php.net\/manual\/en\/function.socket-atmark.php\" target=\"_blank\" rel=\"noopener noreferrer\"><code>socket_atmark()<\/code><\/a>.<\/li>\n<li>Nuevas funciones de cadena: <a href=\"https:\/\/www.php.net\/manual\/en\/function.str-increment.php\" target=\"_blank\" rel=\"noopener noreferrer\"><code>str_increment()<\/code><\/a>, <a href=\"https:\/\/www.php.net\/manual\/en\/function.str-decrement.php\" target=\"_blank\" rel=\"noopener noreferrer\"><code>str_decrement()<\/code><\/a>y<a href=\"https:\/\/www.php.net\/manual\/en\/function.stream-context-set-options.php\" target=\"_blank\" rel=\"noopener noreferrer\"><code> stream_context_set_options()<\/code><\/a>.<\/li>\n<li>Nuevo m\u00e9todo de la clase ZipArchive: <a href=\"https:\/\/www.php.net\/manual\/en\/ziparchive.getarchiveflag.php\" target=\"_blank\" rel=\"noopener noreferrer\"><code>ZipArchive::getArchiveFlag()<\/code><\/a>.<\/li>\n<li>Nuevo ajuste INI para establecer el tama\u00f1o m\u00e1ximo de stack permitido: <a href=\"https:\/\/www.php.net\/manual\/en\/migration83.other-changes.php#migration83.other-changes.ini\" target=\"_blank\" rel=\"noopener noreferrer\"><code>zend.max_allowed_stack_size<\/code><\/a>.<\/li>\n<\/ul>\n<h2>Depreciaciones en PHP 8.3<\/h2>\n<p>Con cada nueva versi\u00f3n de PHP, algunas funciones y configuraciones se marcan para su eventual eliminaci\u00f3n. Una vez desaprobadas, estas funciones no se recomiendan para un uso continuado y generar\u00e1n avisos en muchos registros cuando aparezcan en c\u00f3digo en ejecuci\u00f3n.<\/p>\n<p>Aqu\u00ed tienes una lista de desaprobaciones en PHP 8.3, con enlaces a informaci\u00f3n adicional:<\/p>\n<ul>\n<li>La constante U_MULTIPLE_DECIMAL_SEPERATORS queda obsoleta en favor de U_MULTIPLE_DECIMAL_SEPARATORS.<\/li>\n<li>La variante <a href=\"https:\/\/www.php.net\/manual\/en\/random.constants.php#constant.mt-rand-php\" target=\"_blank\" rel=\"noopener noreferrer\"><code>3MT_RAND_PHP<\/code><\/a> Mt19937 est\u00e1 obsoleta.<\/li>\n<li><a href=\"https:\/\/www.php.net\/manual\/en\/reflectionclass.getstaticproperties.php\" target=\"_blank\" rel=\"noopener noreferrer\"><code>ReflectionClass::getStaticProperties()<\/code><\/a> ya no es anulable.<\/li>\n<li>Ajustes INI <a href=\"https:\/\/www.php.net\/manual\/en\/info.configuration.php#ini.assert.active\" target=\"_blank\" rel=\"noopener noreferrer\"><code>assert.active<\/code><\/a>, <a href=\"https:\/\/www.php.net\/manual\/en\/info.configuration.php#ini.assert.bail\" target=\"_blank\" rel=\"noopener noreferrer\"><code>assert.bail<\/code><\/a>, <a href=\"https:\/\/www.php.net\/manual\/en\/info.configuration.php#ini.assert.callback\" target=\"_blank\" rel=\"noopener noreferrer\"><code>assert.callback<\/code><\/a>, <a href=\"https:\/\/www.php.net\/manual\/en\/info.configuration.php#ini.assert.exception\" target=\"_blank\" rel=\"noopener noreferrer\"><code>assert.exception<\/code><\/a>y <a href=\"https:\/\/www.php.net\/manual\/en\/info.configuration.php#ini.assert.warning\" target=\"_blank\" rel=\"noopener noreferrer\"><code>assert.warning<\/code><\/a> est\u00e1n obsoletos.<\/li>\n<li>Llamando a <a href=\"https:\/\/www.php.net\/manual\/en\/function.get-class.php\" target=\"_blank\" rel=\"noopener noreferrer\"><code>get_class()<\/code><\/a> y <a href=\"https:\/\/www.php.net\/manual\/en\/function.get-parent-class.php\" target=\"_blank\" rel=\"noopener noreferrer\"><code>get_parent_class()<\/code><\/a> sin argumentos est\u00e1n obsoletos.<\/li>\n<\/ul>\n<h2>Resumen<\/h2>\n<p>Hemos visto los cambios significativos incluidos en PHP 8.3. Para obtener una lista detallada de todas las actualizaciones de esta versi\u00f3n, puedes consultar el <a href=\"https:\/\/www.php.net\/ChangeLog-8.php#PHP_8_3\" target=\"_blank\" rel=\"noopener noreferrer\">registro oficial de cambios<\/a> de la versi\u00f3n. Si planeas trasladar tu c\u00f3digo a una plataforma que ejecute la \u00faltima versi\u00f3n de PHP, la <a href=\"https:\/\/www.php.net\/manual\/en\/migration83.php\">Gu\u00eda de Migraci\u00f3n de 8.2 a 8.3<\/a> puede ayudarte a no tener problemas.<\/p>\n<p>Si te corresponde instalar PHP en tus servidores de desarrollo o producci\u00f3n, la versi\u00f3n 8.3 ya est\u00e1 <a href=\"https:\/\/www.php.net\/downloads.php\" target=\"_blank\" rel=\"noopener noreferrer\">lista para su descarga<\/a>.<\/p>\n<p>Si eres cliente de Kinsta, puedes confiar en nosotros para que esta versi\u00f3n est\u00e9 disponible en los servidores de tus proyectos de <a href=\"https:\/\/kinsta.com\/es\/wordpress-hosting\/\">Alojamiento Administrado de WordPress<\/a> o <a href=\"https:\/\/sevalla.com\/application-hosting\/\">Alojamiento de Aplicaciones<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>PHP 8.3 se public\u00f3 seg\u00fan lo previsto el 23 de noviembre y contiene muchas nuevas funciones y mejoras desde el lanzamiento de PHP 8.2. Aunque oficialmente &#8230;<\/p>\n","protected":false},"author":259,"featured_media":72052,"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-72051","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>PHP 8.3: Novedades y Cambios de la \u00daltima Versi\u00f3n<\/title>\n<meta name=\"description\" content=\"PHP 8.3 ha sido lanzado y estamos echando un vistazo a algunas de las nuevas e importantes caracter\u00edsticas y actualizaciones de 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:\/\/kinsta.com\/es\/blog\/php-8-3\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"PHP 8.3: Novedades y Cambios de la \u00daltima Versi\u00f3n\" \/>\n<meta property=\"og:description\" content=\"PHP 8.3 ha sido lanzado y estamos echando un vistazo a algunas de las nuevas e importantes caracter\u00edsticas y actualizaciones de la versi\u00f3n.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/es\/blog\/php-8-3\/\" \/>\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=\"2023-11-29T07:25:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-12-04T11:08:37+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/11\/whats-new-in-php-83.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=\"PHP 8.3 ha sido lanzado y estamos echando un vistazo a algunas de las nuevas e importantes caracter\u00edsticas y actualizaciones de la versi\u00f3n.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/11\/whats-new-in-php-83.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=\"9 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-3\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/php-8-3\/\"},\"author\":{\"name\":\"Steve Bonisteel\",\"@id\":\"https:\/\/kinsta.com\/es\/#\/schema\/person\/d84ceff87bd64a4368a581fc8aa8bd6f\"},\"headline\":\"PHP 8.3: Novedades y Cambios de la \u00daltima Versi\u00f3n\",\"datePublished\":\"2023-11-29T07:25:00+00:00\",\"dateModified\":\"2023-12-04T11:08:37+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/php-8-3\/\"},\"wordCount\":1574,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/es\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/php-8-3\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/11\/whats-new-in-php-83.png\",\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinsta.com\/es\/blog\/php-8-3\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/es\/blog\/php-8-3\/\",\"url\":\"https:\/\/kinsta.com\/es\/blog\/php-8-3\/\",\"name\":\"PHP 8.3: Novedades y Cambios de la \u00daltima Versi\u00f3n\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/es\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/php-8-3\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/php-8-3\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/11\/whats-new-in-php-83.png\",\"datePublished\":\"2023-11-29T07:25:00+00:00\",\"dateModified\":\"2023-12-04T11:08:37+00:00\",\"description\":\"PHP 8.3 ha sido lanzado y estamos echando un vistazo a algunas de las nuevas e importantes caracter\u00edsticas y actualizaciones de la versi\u00f3n.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/php-8-3\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/es\/blog\/php-8-3\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/kinsta.com\/es\/blog\/php-8-3\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/11\/whats-new-in-php-83.png\",\"contentUrl\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/11\/whats-new-in-php-83.png\",\"width\":1460,\"height\":730},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/es\/blog\/php-8-3\/#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.3: Novedades y Cambios de la \u00daltima Versi\u00f3n\"}]},{\"@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.3: Novedades y Cambios de la \u00daltima Versi\u00f3n","description":"PHP 8.3 ha sido lanzado y estamos echando un vistazo a algunas de las nuevas e importantes caracter\u00edsticas y actualizaciones de 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:\/\/kinsta.com\/es\/blog\/php-8-3\/","og_locale":"es_ES","og_type":"article","og_title":"PHP 8.3: Novedades y Cambios de la \u00daltima Versi\u00f3n","og_description":"PHP 8.3 ha sido lanzado y estamos echando un vistazo a algunas de las nuevas e importantes caracter\u00edsticas y actualizaciones de la versi\u00f3n.","og_url":"https:\/\/kinsta.com\/es\/blog\/php-8-3\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/kinsta.es\/","article_published_time":"2023-11-29T07:25:00+00:00","article_modified_time":"2023-12-04T11:08:37+00:00","og_image":[{"width":1460,"height":730,"url":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/11\/whats-new-in-php-83.png","type":"image\/png"}],"author":"Steve Bonisteel","twitter_card":"summary_large_image","twitter_description":"PHP 8.3 ha sido lanzado y estamos echando un vistazo a algunas de las nuevas e importantes caracter\u00edsticas y actualizaciones de la versi\u00f3n.","twitter_image":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/11\/whats-new-in-php-83.png","twitter_creator":"@Kinsta_ES","twitter_site":"@Kinsta_ES","twitter_misc":{"Escrito por":"Steve Bonisteel","Tiempo de lectura":"9 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/es\/blog\/php-8-3\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/es\/blog\/php-8-3\/"},"author":{"name":"Steve Bonisteel","@id":"https:\/\/kinsta.com\/es\/#\/schema\/person\/d84ceff87bd64a4368a581fc8aa8bd6f"},"headline":"PHP 8.3: Novedades y Cambios de la \u00daltima Versi\u00f3n","datePublished":"2023-11-29T07:25:00+00:00","dateModified":"2023-12-04T11:08:37+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/es\/blog\/php-8-3\/"},"wordCount":1574,"commentCount":0,"publisher":{"@id":"https:\/\/kinsta.com\/es\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/es\/blog\/php-8-3\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/11\/whats-new-in-php-83.png","inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinsta.com\/es\/blog\/php-8-3\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/es\/blog\/php-8-3\/","url":"https:\/\/kinsta.com\/es\/blog\/php-8-3\/","name":"PHP 8.3: Novedades y Cambios de la \u00daltima Versi\u00f3n","isPartOf":{"@id":"https:\/\/kinsta.com\/es\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/es\/blog\/php-8-3\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/es\/blog\/php-8-3\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/11\/whats-new-in-php-83.png","datePublished":"2023-11-29T07:25:00+00:00","dateModified":"2023-12-04T11:08:37+00:00","description":"PHP 8.3 ha sido lanzado y estamos echando un vistazo a algunas de las nuevas e importantes caracter\u00edsticas y actualizaciones de la versi\u00f3n.","breadcrumb":{"@id":"https:\/\/kinsta.com\/es\/blog\/php-8-3\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/es\/blog\/php-8-3\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/kinsta.com\/es\/blog\/php-8-3\/#primaryimage","url":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/11\/whats-new-in-php-83.png","contentUrl":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/11\/whats-new-in-php-83.png","width":1460,"height":730},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/es\/blog\/php-8-3\/#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.3: Novedades y Cambios de la \u00daltima Versi\u00f3n"}]},{"@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\/72051","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=72051"}],"version-history":[{"count":7,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/posts\/72051\/revisions"}],"predecessor-version":[{"id":72180,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/posts\/72051\/revisions\/72180"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/72051\/translations\/en"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/72051\/translations\/it"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/72051\/translations\/pt"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/72051\/translations\/fr"},{"embeddable":true,"hreflang":"ja","title":"Japanese","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/72051\/translations\/jp"},{"embeddable":true,"hreflang":"nl","title":"Dutch","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/72051\/translations\/nl"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/72051\/translations\/es"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/72051\/translations\/de"},{"href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/72051\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/media\/72052"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/media?parent=72051"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/tags?post=72051"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/topic?post=72051"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}