{"id":18107,"date":"2023-06-20T12:08:58","date_gmt":"2023-06-20T12:08:58","guid":{"rendered":"https:\/\/soloweb.com.br\/blog\/?p=18107"},"modified":"2023-06-30T14:27:45","modified_gmt":"2023-06-30T14:27:45","slug":"novidade-do-php-8-3","status":"publish","type":"post","link":"https:\/\/soloweb.com.br\/blog\/2023\/06\/20\/novidade-do-php-8-3\/","title":{"rendered":"Novidade do PHP 8.3"},"content":{"rendered":"\n<p>O PHP 8.3 ainda n\u00e3o foi lan\u00e7ado oficialmente, mas sua vers\u00e3o alfa est\u00e1 dispon\u00edvel. De acordo com a&nbsp;<a href=\"https:\/\/wiki.php.net\/todo\/php83\" target=\"_blank\" rel=\"noreferrer noopener\">lista de tarefas de prepara\u00e7\u00e3o<\/a>&nbsp;,&nbsp;<strong>o PHP 8.3 ser\u00e1 lan\u00e7ado em 23 de novembro de 2023<\/strong>&nbsp;.&nbsp;Ele ser\u00e1 testado por meio de tr\u00eas lan\u00e7amentos alfa, tr\u00eas beta e seis candidatos a lan\u00e7amento.<\/p>\n\n\n\n<p><strong>O que h\u00e1 de novo no PHP 8.3: novos recursos e mudan\u00e7as<\/strong><\/p>\n\n\n\n<p><\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"73dc44f700b889d9dd93973c035656fe\">json_validate()<\/h3>\n\n\n\n<p>Este PHP RFC prop\u00f5e a introdu\u00e7\u00e3o de uma nova fun\u00e7\u00e3o,&nbsp;<code>json_validate()<\/code>, para validar se uma string cont\u00e9m JSON v\u00e1lido.<\/p>\n\n\n\n<p>As implementa\u00e7\u00f5es atuais usam principalmente&nbsp;<code>json_decode()<\/code>, que gera um ZVAL (objeto\/array\/etc.) durante a an\u00e1lise e usa mem\u00f3ria e poder de processamento desnecess\u00e1rios.<\/p>\n\n\n\n<p>A nova fun\u00e7\u00e3o usa o mesmo analisador JSON que existe no n\u00facleo do PHP e \u00e9 usado pelo&nbsp;<code>json_decode()<\/code>, garantindo que o que \u00e9 v\u00e1lido em&nbsp;<code>json_validate()<\/code> tamb\u00e9m seja v\u00e1lido em&nbsp;<code>json_decode()<\/code>.<\/p>\n\n\n\n<p>Aqui est\u00e3o alguns exemplos de como usar&nbsp;<code>json_validate()<\/code>:<\/p>\n\n\n\n<p>No PHP 8.2 e anteriores, usando&nbsp;<code>json_decode()<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$json = '{ \"foo\": \"bar\" }';\n \n$decoded = json_decode($json);\n \nif ($decoded === null &amp;&amp; json_last_error() !== JSON_ERROR_NONE) {\n    \/\/ Invalid JSON.\n} else {\n    \/\/ Valid JSON.\n}<\/code><\/pre>\n\n\n\n<p>No PHP 8.3, usando&nbsp;<code>json_validate()<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$json = '{ \"foo\": \"bar\" }';\n \nif (json_validate($json)) {\n    \/\/ Valid JSON.\n} else {\n    \/\/ Invalid JSON.\n}<\/code><\/pre>\n\n\n\n<p>Saiba mais:&nbsp;<a href=\"https:\/\/wiki.php.net\/rfc\/json_validate\" target=\"_blank\" rel=\"noreferrer noopener\">PHP RFC: json_validate<\/a><\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-wp-embed is-provider-soloweb-tecnologia wp-block-embed-soloweb-tecnologia\"><div class=\"wp-block-embed__wrapper\">\n<blockquote class=\"wp-embedded-content\" data-secret=\"p8ZYD4UddT\"><a href=\"https:\/\/soloweb.com.br\/blog\/2023\/03\/07\/como-publicar-sua-biblioteca-php-no-packagist-org\/\">Como publicar sua biblioteca PHP no packagist.org<\/a><\/blockquote><iframe loading=\"lazy\" class=\"wp-embedded-content\" sandbox=\"allow-scripts\" security=\"restricted\" style=\"position: absolute; clip: rect(1px, 1px, 1px, 1px);\" title=\"&#8220;Como publicar sua biblioteca PHP no packagist.org&#8221; &#8212; SOLOWEB Tecnologia\" src=\"https:\/\/soloweb.com.br\/blog\/2023\/03\/07\/como-publicar-sua-biblioteca-php-no-packagist-org\/embed\/#?secret=Xby0rrYQbq#?secret=p8ZYD4UddT\" data-secret=\"p8ZYD4UddT\" width=\"600\" height=\"338\" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\" scrolling=\"no\"><\/iframe>\n<\/div><figcaption class=\"wp-element-caption\">Veja tamb\u00e9m<\/figcaption><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"f45d6beac517297c343e180f1337fe85\"><code>unserialize()<\/code> &#8211; Tratamento de erros&nbsp;aprimorado<\/h3>\n\n\n\n<p>A RFC prop\u00f5e duas mudan\u00e7as principais na fun\u00e7\u00e3o unserialize do PHP para aprimorar seu tratamento de erros.<\/p>\n\n\n\n<p>O tratamento de erro atual em&nbsp;<code>unserialize() <\/code>\u00e9 inconsistente, pois pode emitir um&nbsp;<code>E_NOTICE<\/code>, um&nbsp;<code>E_WARNING<\/code> ou lan\u00e7ar um arbitr\u00e1rio \u2063, ou <code>Exception<\/code>&nbsp;<code>Error <\/code>dependendo de como a string de entrada est\u00e1 mal formada.<\/p>\n\n\n\n<p>Isso dificulta o tratamento confi\u00e1vel de erros durante a desserializa\u00e7\u00e3o.<\/p>\n\n\n\n<p>A primeira proposta \u00e9 introduzir uma nova exce\u00e7\u00e3o de wrapper,&nbsp;<code>UnserializationFailedException<\/code>.<\/p>\n\n\n\n<p>Sempre que um&nbsp;<code>Throwable<\/code>for lan\u00e7ado durante a unserialize, isso&nbsp;<code>Throwable<\/code>ser\u00e1 agrupado em uma nova inst\u00e2ncia de&nbsp;<code>UnserializationFailedException<\/code>.<\/p>\n\n\n\n<p>Isso permite que os desenvolvedores usem um \u00fanico&nbsp;<code>catch(UnserializationFailedException $e)<\/code> para lidar com todos&nbsp;<code>Throwable<\/code>os acontecimentos poss\u00edveis durante a desserializa\u00e7\u00e3o.<\/p>\n\n\n\n<p>O original&nbsp;<code>Throwable <\/code>pode ser acessado por meio da propriedade $previous de&nbsp;<code>UnserializationFailedException<\/code>, permitindo que o desenvolvedor aprenda sobre a causa real da falha de deserializa\u00e7\u00e3o.<\/p>\n\n\n\n<p>A segunda proposta \u00e9 aumentar a severidade do reporte de erros no&nbsp;<code>unserialize()<\/code> parser.<\/p>\n\n\n\n<p>No estado atual, a desserializa\u00e7\u00e3o pode falhar devido a um erro de sintaxe na string de entrada, n\u00fameros inteiros fora do intervalo e problemas semelhantes, que resultam em um&nbsp;<code>E_NOTICE<\/code> ou&nbsp;<code>E_WARNING<\/code>.<\/p>\n\n\n\n<p>Este RFC prop\u00f5e aumentar a gravidade desses avisos\/avisos e, finalmente, fazer com que eles lancem o novo arquivo&nbsp;<code>UnserializationFailedException<\/code>.<\/p>\n\n\n\n<p>Antes das mudan\u00e7as propostas, lidar com erros de desserializa\u00e7\u00e3o em PHP poderia ser assim:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>try {\n    set_error_handler(static function ($severity, $message, $file, $line) {\n        throw new \\ErrorException($message, 0, $severity, $file, $line);\n    });\n    $result = unserialize($serialized);\n} catch (\\Throwable $e) {\n    \/\/ Falha na deserializa\u00e7\u00e3o. Bloco catch opcional se o erro n\u00e3o deve ser tratado.\n} finally {\n    restore_error_handler();\n}\n \nvar_dump($result); \/\/ Fa\u00e7a algo com o $result.\n                   \/\/ N\u00e3o deve aparecer no 'tentar' para n\u00e3o 'capturar' erros n\u00e3o relacionados.<\/code><\/pre>\n\n\n\n<p>E v\u00e1rios casos t\u00edpicos podem ser assim:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>unserialize('foo'); \/\/ Notice: unserialize(): Error at offset 0 of 3 bytes in php-src\/test.php on line 3\nunserialize('i:12345678901234567890;'); \/\/ Warning: unserialize(): Numerical result out of range in php-src\/test.php on line 4\nunserialize('E:3:\"foo\";'); \/\/ Warning: unserialize(): Invalid enum name 'foo' (missing colon) in php-src\/test.php on line 5\n                           \/\/ Notice: unserialize(): Error at offset 0 of 10 bytes in php-src\/test.php on line 5<\/code><\/pre>\n\n\n\n<p>Ap\u00f3s as altera\u00e7\u00f5es propostas, o tratamento dos erros de deserializa\u00e7\u00e3o no PHP ficaria da seguinte forma:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>function unserialize(string $data, array $options = &#91;]): mixed\n{\n    try {\n        \/\/ The existing unserialization logic happens here.\n    } catch (\\Throwable $e) {\n        throw new \\UnserializationFailedException(previous: $e);\n    }\n}<\/code><\/pre>\n\n\n\n<p>E a implementa\u00e7\u00e3o da nova exce\u00e7\u00e3o:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>class UnserializationFailedException extends \\Exception\n{\n}<\/code><\/pre>\n\n\n\n<p>O RFC foi parcialmente aceito para PHP 8.3.<\/p>\n\n\n\n<p>Saiba mais:&nbsp;<a rel=\"noreferrer noopener\" target=\"_blank\" href=\"https:\/\/wiki.php.net\/rfc\/improve_unserialize_error_handling\">PHP RFC: Melhore o tratamento de erros unserialize()<\/a><\/p>\n\n\n\n<p><\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"df52ef7821afa777b1fb1bc9c53cbc25\">Adi\u00e7\u00f5es de randomizador<\/h3>\n\n\n\n<p>O RFC para PHP intitulado \u201cRandomizer Additions\u201d prop\u00f5e tr\u00eas novos m\u00e9todos e uma enumera\u00e7\u00e3o de acompanhamento para a&nbsp;<code>\\Random\\Randomizer<\/code>classe.<\/p>\n\n\n\n<p>O m\u00e9todo&nbsp;<code>getBytesFromString()<\/code> permite gerar uma string de um comprimento especificado usando bytes selecionados aleatoriamente de uma determinada string.<\/p>\n\n\n\n<p>O&nbsp;<code>getFloat()<\/code> m\u00e9todo retorna um float entre um definido&nbsp;<code>$min<\/code>e&nbsp;<code>$max<\/code>, com os limites do intervalo sendo abertos ou fechados dependendo do valor do par\u00e2metro&nbsp;<code>$boundary<\/code>.<\/p>\n\n\n\n<p>O&nbsp;<code>m\u00e9todo<\/code> <code>nextFloat()<\/code> \u00e9 equivalente a&nbsp;<code>-&gt;getFloat(0, 1, \\Random\\IntervalBoundary::ClosedOpen)<\/code>.<\/p>\n\n\n\n<p>A enumera\u00e7\u00e3o&nbsp;<code>IntervalBoundary<\/code>\u00e9 usada para determinar a natureza dos limites do intervalo no&nbsp;<code>m\u00e9todo<\/code> <code>getFloat()<\/code><\/p>\n\n\n\n<p>Por exemplo, com o m\u00e9todo&nbsp;<code>getBytesFromString()<\/code>:<\/p>\n\n\n\n<p>Antes:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$randomString = '';\n \n$characters = 'abcdefghijklmnopqrstuvwxyz0123456789';\n \n$charactersLength = strlen($characters);\n \nfor ($i = 0; $i &lt; 16; $i++) {\n    $randomString .= $characters&#91;rand(0, $charactersLength - 1)];\n}\n \n$randomDomain = $randomString . \".example.com\";<\/code><\/pre>\n\n\n\n<p>Depois:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$randomizer = new \\Random\\Randomizer();\n \n$randomDomain = $randomizer-&gt;getBytesFromString('abcdefghijklmnopqrstuvwxyz0123456789', 16) . \".example.com\";<\/code><\/pre>\n\n\n\n<p>Saiba mais:&nbsp;<a rel=\"noreferrer noopener\" target=\"_blank\" href=\"https:\/\/wiki.php.net\/rfc\/randomizer_additions\">PHP RFC: adi\u00e7\u00f5es de randomizador<\/a><\/p>\n\n\n\n<p><\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"e5c6133c9750ea8b7efe078f11a64574\">Busca constante de classe din\u00e2mica<\/h3>\n\n\n\n<p>Este RFC prop\u00f5e permitir que as constantes de classe sejam acessadas dinamicamente usando vari\u00e1veis.<\/p>\n\n\n\n<p>Em vez de acessar constantes de classe com um valor de string est\u00e1tico (por exemplo,&nbsp;<code>ClassName::CONSTANT<\/code>), voc\u00ea pode usar uma vari\u00e1vel contendo o nome da constante.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$constant = 'CONSTANT';\n \nClassName::{$constant}<\/code><\/pre>\n\n\n\n<p>Essa altera\u00e7\u00e3o facilitaria o acesso \u00e0s constantes de classe de forma din\u00e2mica e program\u00e1tica.<\/p>\n\n\n\n<p>Saiba mais:&nbsp;<a rel=\"noreferrer noopener\" target=\"_blank\" href=\"https:\/\/wiki.php.net\/rfc\/dynamic_class_constant_fetch\">PHP RFC: busca constante de classe din\u00e2mica<\/a><\/p>\n\n\n\n<p><\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"febfba681765d75a0ae192c85e07bc2f\">Exce\u00e7\u00f5es de data\/hora mais apropriadas<\/h3>\n\n\n\n<p>A RFC prop\u00f5e introduzir exce\u00e7\u00f5es e erros espec\u00edficos de extens\u00e3o de data\/hora no PHP, em vez dos avisos, erros e exce\u00e7\u00f5es mais gen\u00e9ricos usados \u200b\u200batualmente.<\/p>\n\n\n\n<p>Isso visa fornecer melhor especificidade e tratamento para exce\u00e7\u00f5es relacionadas a Data\/Hora.<\/p>\n\n\n\n<p>A proposta inclui v\u00e1rias exce\u00e7\u00f5es espec\u00edficas, como&nbsp;<code>DateInvalidTimeZoneException<\/code>,&nbsp;<code>DateInvalidOperationException<\/code>,&nbsp;<code>DateMalformedStringException<\/code>,&nbsp;<code>DateMalformedIntervalStringException<\/code>, e outras.<\/p>\n\n\n\n<p>Notavelmente, essa altera\u00e7\u00e3o afeta apenas o uso do estilo orientado a objeto de fun\u00e7\u00f5es de data\/hora, pois o uso do estilo procedural continuar\u00e1 a usar avisos e erros como atualmente.<\/p>\n\n\n\n<p>Abaixo est\u00e3o exemplos de como as novas exce\u00e7\u00f5es funcionam:<\/p>\n\n\n\n<p>Antes da mudan\u00e7a:<\/p>\n\n\n\n<p>Para criar um&nbsp;<code>DateInterval<\/code>com uma string mal formada, a chamada da fun\u00e7\u00e3o retornaria um aviso e falso:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>try {\n    $i = DateInterval::createFromDateString(\"foo\");\n} catch (Exception $e) {\n    echo $e::class, ': ', $e-&gt;getMessage(), \"\\n\";\n}<\/code><\/pre>\n\n\n\n<p>Para tentar subtrair uma especifica\u00e7\u00e3o de tempo relativo n\u00e3o especial de um&nbsp;<code>DateTimeImmutable<\/code>objeto, a chamada de fun\u00e7\u00e3o retornaria um aviso e&nbsp;<code>null<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$now = new DateTimeImmutable(\"2022-04-22 16:25:11 BST\");\n \nvar_dump($now-&gt;sub($e));<\/code><\/pre>\n\n\n\n<p>Ap\u00f3s a altera\u00e7\u00e3o:<\/p>\n\n\n\n<p>Para criar um&nbsp;<code>DateInterval<\/code>com uma string mal formada, a fun\u00e7\u00e3o agora lan\u00e7a um&nbsp;<code>DateMalformedIntervalStringException<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>try {\n    $i = DateInterval::createFromDateString(\"foo\");\n} catch (DateMalformedIntervalStringException $e) {\n    echo $e::class, ': ', $e-&gt;getMessage(), \"\\n\";\n}<\/code><\/pre>\n\n\n\n<p>Para tentar subtrair uma especifica\u00e7\u00e3o de tempo relativo n\u00e3o especial de um&nbsp;<code>DateTimeImmutable<\/code>objeto, a fun\u00e7\u00e3o agora lan\u00e7a um&nbsp;<code>DateInvalidOperationException<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$now = new DateTimeImmutable(\"2022-04-22 16:25:11 BST\");\n \ntry {\n    var_dump($now-&gt;sub($e));\n} catch (DateInvalidOperationException $e) {\n    echo $e::class, ': ', $e-&gt;getMessage(), \"\\n\";\n}<\/code><\/pre>\n\n\n\n<p>Saiba mais:&nbsp;<a rel=\"noreferrer noopener\" target=\"_blank\" href=\"https:\/\/wiki.php.net\/rfc\/datetime-exceptions\">PHP RFC: exce\u00e7\u00f5es de data\/hora mais apropriadas<\/a><\/p>\n\n\n\n<p><\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"17421b398ec36ad1ddd7d9adc810b9e0\">Leia apenas as altera\u00e7\u00f5es<\/h3>\n\n\n\n<p>Este \u00e9 um RFC de duas partes e somente a parte em que as propriedades somente leitura podem agora ser reinicializadas durante a clonagem foi aceita.<\/p>\n\n\n\n<p>Esta proposta visa eliminar a limita\u00e7\u00e3o que impede que propriedades readonly sejam \u201cdeep-cloned\u201d.<\/p>\n\n\n\n<p>Ele permite que as propriedades somente leitura sejam reinicializadas durante a execu\u00e7\u00e3o da chamada do m\u00e9todo m\u00e1gico &nbsp;<code>__clone()<\/code>.&nbsp;Aqui est\u00e1 um exemplo dessa mudan\u00e7a:<\/p>\n\n\n\n<p>Antes:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>class Foo {\n    public function __construct(\n        public readonly DateTime $bar,\n        public readonly DateTime $baz\n    ) {}\n \n    public function __clone()\n    {\n        $this-&gt;bar = clone $this-&gt;bar; \/\/ Doesn't work, an error is thrown.\n    }\n}<\/code><\/pre>\n\n\n\n<p>Depois:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>class Foo {\n    public function __construct(\n        public readonly DateTime $bar,\n        public readonly DateTime $baz\n    ) {}\n \n    public function __clone()\n    {\n        $this-&gt;bar = clone $this-&gt;bar; \/\/ Works.\n        $this-&gt;cloneBaz();\n    }\n \n    private function cloneBaz()\n    {\n        unset($this-&gt;baz); \/\/ Also works.\n    }\n}\n \n$foo = new Foo(new DateTime(), new DateTime());\n \n$foo2 = clone $foo;\n\/\/ No error, Foo2::$bar is cloned deeply, while Foo2::$baz becomes uninitialized.<\/code><\/pre>\n\n\n\n<p>Saiba mais:&nbsp;<a rel=\"noreferrer noopener\" target=\"_blank\" href=\"https:\/\/wiki.php.net\/rfc\/readonly_amendments\">PHP RFC: Altera\u00e7\u00f5es somente leitura<\/a><\/p>\n\n\n\n<p><\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"b5de4743012e4c8a01f9104ee8b75cfb\">Saner array_sum() e array_product()<\/h3>\n\n\n\n<p>Este RFC introduz altera\u00e7\u00f5es no comportamento das fun\u00e7\u00f5es&nbsp;<code>array_sum()<\/code> e&nbsp;<code>array_product()<\/code> para torn\u00e1-los mais consistentes com suas implementa\u00e7\u00f5es de userland usando&nbsp;<code>array_reduce()<\/code>.<\/p>\n\n\n\n<p>Atualmente,&nbsp;<code>array_sum()<\/code> e&nbsp;<code>array_product()<\/code> pula entradas de array ou objeto, enquanto suas implementa\u00e7\u00f5es de userland usando array_reduce() lan\u00e7am um arquivo&nbsp;<code>TypeError<\/code>.<\/p>\n\n\n\n<p>As mudan\u00e7as propostas incluem:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Usando o mesmo comportamento para&nbsp;<code>array_sum()<\/code> e&nbsp;<code>array_product()<\/code> como as&nbsp;<code>array_reduce()<\/code> variantes.<\/li>\n\n\n\n<li>Emitindo um&nbsp;<code>E_WARNING<\/code>para tipos incompat\u00edveis.<\/li>\n\n\n\n<li>Objetos de suporte com elenco num\u00e9rico para serem adicionados\/multiplicados.<\/li>\n<\/ol>\n\n\n\n<p>Saiba mais:&nbsp;<a rel=\"noreferrer noopener\" target=\"_blank\" href=\"https:\/\/wiki.php.net\/rfc\/saner-array-sum-product\">PHP RFC: Saner array_(sum|product)()<\/a><\/p>\n\n\n\n<p><\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"aeea1ed869b85decfac8bb6fe0760063\">PHP RFC: Constantes de classe digitadas<\/h3>\n\n\n\n<p>As constantes de classe digitadas est\u00e3o finalmente chegando no PHP 8.3!<\/p>\n\n\n\n<p>Eles ajudar\u00e3o a reduzir erros e confus\u00f5es decorrentes de classes filhas substituindo as constantes da classe pai.<\/p>\n\n\n\n<p>As constantes de classe digitadas podem ser declaradas em classes, interfaces, caracter\u00edsticas e enums.<\/p>\n\n\n\n<p>Pontos chave:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>As declara\u00e7\u00f5es de tipo constante de classe suportam todas as declara\u00e7\u00f5es de tipo do PHP, exceto void, callable e never.<\/li>\n\n\n\n<li>O modo Strict_types n\u00e3o afeta o comportamento, pois as verifica\u00e7\u00f5es de tipo s\u00e3o sempre executadas no modo estrito.<\/li>\n\n\n\n<li>As constantes de classe s\u00e3o covariantes, o que significa que seus tipos n\u00e3o podem ser ampliados durante a heran\u00e7a.<\/li>\n\n\n\n<li>Os valores constantes devem corresponder ao tipo da constante de classe, com a exce\u00e7\u00e3o de que as constantes de classe float tamb\u00e9m podem aceitar valores inteiros.<\/li>\n\n\n\n<li><a rel=\"noreferrer noopener\" target=\"_blank\" href=\"https:\/\/www.php.net\/manual\/en\/class.reflectionclassconstant.php\">ReflectionClassConstant<\/a>&nbsp;\u00e9 estendido com dois m\u00e9todos: getType() e hasType().<\/li>\n<\/ul>\n\n\n\n<p>Como voc\u00ea pode imaginar, as constantes digitadas s\u00e3o super f\u00e1ceis de usar, assim como as propriedades tipadas:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>interface Foo {\n    public const string BAR = 'baz';\n}\n \nclass Bar extends Foo {\n    \/\/ Doesn't work anymore! You cannot change the\n    \/\/ type and assign a value of another type.\n    public const array BAR = &#91;'foo', 'bar', 'baz'];\n    \/\/ OK.\n    public const string BAR = 'foo';\n}<\/code><\/pre>\n\n\n\n<p>Saiba mais:&nbsp;<a rel=\"noreferrer noopener\" target=\"_blank\" href=\"https:\/\/wiki.php.net\/rfc\/typed_class_constants\">PHP RFC: Constantes de classe digitadas<\/a><\/p>\n\n\n\n<p><\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"bc0de28bae4638feb7ed6bc36d8f7445\">Inicializadores de vari\u00e1veis \u200b\u200best\u00e1ticas arbitr\u00e1rias<\/h3>\n\n\n\n<p>A RFC prop\u00f5e uma altera\u00e7\u00e3o que permitiria ao inicializador de vari\u00e1veis \u200b\u200best\u00e1ticas conter express\u00f5es arbitr\u00e1rias, em vez de apenas express\u00f5es constantes.<\/p>\n\n\n\n<p>Isso torna a linguagem mais flex\u00edvel e menos confusa para os usu\u00e1rios.&nbsp;Por exemplo, antes dessa mudan\u00e7a, uma vari\u00e1vel est\u00e1tica s\u00f3 podia ser inicializada com uma constante:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>function foo() {\n    static $i = 1;\n    echo $i++, \"\\n\";\n}\n \nfoo();\nfoo();\nfoo();<\/code><\/pre>\n\n\n\n<p>Isso produziria:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>1\n2\n3<\/code><\/pre>\n\n\n\n<p>Com a altera\u00e7\u00e3o proposta, uma vari\u00e1vel est\u00e1tica pode ser inicializada com uma chamada de fun\u00e7\u00e3o:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>function bar() {\n    echo \"bar() called\\n\";\n    return 1;\n}\n \nfunction foo() {\n    static $i = bar();\n    echo $i++, \"\\n\";\n}\n \nfoo();\nfoo();\nfoo();<\/code><\/pre>\n\n\n\n<p>A proposta tamb\u00e9m introduz v\u00e1rias mudan\u00e7as na sem\u00e2ntica da inicializa\u00e7\u00e3o de vari\u00e1veis \u200b\u200best\u00e1ticas, incluindo o tratamento de exce\u00e7\u00f5es durante a inicializa\u00e7\u00e3o, a ordem das opera\u00e7\u00f5es quando destruidores est\u00e3o envolvidos e o tratamento da recurs\u00e3o durante a inicializa\u00e7\u00e3o.<\/p>\n\n\n\n<p>Por\u00e9m, a declara\u00e7\u00e3o novamente de vari\u00e1veis \u200b\u200best\u00e1ticas n\u00e3o seria permitida e isso altera a forma como&nbsp;<code>ReflectionFunction::getStaticVariables()<\/code>funciona com vari\u00e1veis \u200b\u200best\u00e1ticas.<\/p>\n\n\n\n<p>Saiba mais:&nbsp;<a href=\"https:\/\/wiki.php.net\/rfc\/arbitrary_static_variable_initializers\" target=\"_blank\" rel=\"noreferrer noopener\">PHP RFC: inicializadores de vari\u00e1veis \u200b\u200best\u00e1ticas arbitr\u00e1rias<\/a><\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>O PHP 8.3 ainda n\u00e3o foi lan\u00e7ado oficialmente, mas sua vers\u00e3o alfa est\u00e1 dispon\u00edvel. De acordo com a&nbsp;lista de tarefas<\/p>\n","protected":false},"author":4,"featured_media":18109,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"colormag_page_container_layout":"default_layout","colormag_page_sidebar_layout":"default_layout","_editorskit_title_hidden":false,"_editorskit_reading_time":0,"_editorskit_is_block_options_detached":false,"_editorskit_block_options_position":"{}","footnotes":""},"categories":[303,132,324],"tags":[70,408],"class_list":["post-18107","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-destaque-secundario","category-php","category-programacao","tag-php","tag-php8-3"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Novidade do PHP 8.3 - SOLOWEB Tecnologia<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/soloweb.com.br\/blog\/2023\/06\/20\/novidade-do-php-8-3\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Novidade do PHP 8.3 - SOLOWEB Tecnologia\" \/>\n<meta property=\"og:description\" content=\"O PHP 8.3 ainda n\u00e3o foi lan\u00e7ado oficialmente, mas sua vers\u00e3o alfa est\u00e1 dispon\u00edvel. De acordo com a&nbsp;lista de tarefas\" \/>\n<meta property=\"og:url\" content=\"https:\/\/soloweb.com.br\/blog\/2023\/06\/20\/novidade-do-php-8-3\/\" \/>\n<meta property=\"og:site_name\" content=\"SOLOWEB Tecnologia\" \/>\n<meta property=\"article:published_time\" content=\"2023-06-20T12:08:58+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-06-30T14:27:45+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/soloweb.com.br\/blog\/wp-content\/uploads\/2023\/06\/WhatsApp-Image-2023-06-20-at-09.06.09.jpeg\" \/>\n\t<meta property=\"og:image:width\" content=\"940\" \/>\n\t<meta property=\"og:image:height\" content=\"787\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Carlos Rolim\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Carlos Rolim\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. tempo de leitura\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/soloweb.com.br\\\/blog\\\/2023\\\/06\\\/20\\\/novidade-do-php-8-3\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/soloweb.com.br\\\/blog\\\/2023\\\/06\\\/20\\\/novidade-do-php-8-3\\\/\"},\"author\":{\"name\":\"Carlos Rolim\",\"@id\":\"https:\\\/\\\/soloweb.com.br\\\/blog\\\/#\\\/schema\\\/person\\\/b10ff5bc260b411c2d82b19fad8ae3f1\"},\"headline\":\"Novidade do PHP 8.3\",\"datePublished\":\"2023-06-20T12:08:58+00:00\",\"dateModified\":\"2023-06-30T14:27:45+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/soloweb.com.br\\\/blog\\\/2023\\\/06\\\/20\\\/novidade-do-php-8-3\\\/\"},\"wordCount\":1453,\"publisher\":{\"@id\":\"https:\\\/\\\/soloweb.com.br\\\/blog\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/soloweb.com.br\\\/blog\\\/2023\\\/06\\\/20\\\/novidade-do-php-8-3\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/soloweb.com.br\\\/blog\\\/wp-content\\\/uploads\\\/2023\\\/06\\\/WhatsApp-Image-2023-06-20-at-09.06.09.jpeg\",\"keywords\":[\"PHP\",\"php8.3\"],\"articleSection\":[\"Destaque Secund\u00e1rio\",\"PHP\",\"Programa\u00e7\u00e3o\"],\"inLanguage\":\"pt-BR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/soloweb.com.br\\\/blog\\\/2023\\\/06\\\/20\\\/novidade-do-php-8-3\\\/\",\"url\":\"https:\\\/\\\/soloweb.com.br\\\/blog\\\/2023\\\/06\\\/20\\\/novidade-do-php-8-3\\\/\",\"name\":\"Novidade do PHP 8.3 - SOLOWEB Tecnologia\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/soloweb.com.br\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/soloweb.com.br\\\/blog\\\/2023\\\/06\\\/20\\\/novidade-do-php-8-3\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/soloweb.com.br\\\/blog\\\/2023\\\/06\\\/20\\\/novidade-do-php-8-3\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/soloweb.com.br\\\/blog\\\/wp-content\\\/uploads\\\/2023\\\/06\\\/WhatsApp-Image-2023-06-20-at-09.06.09.jpeg\",\"datePublished\":\"2023-06-20T12:08:58+00:00\",\"dateModified\":\"2023-06-30T14:27:45+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/soloweb.com.br\\\/blog\\\/2023\\\/06\\\/20\\\/novidade-do-php-8-3\\\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/soloweb.com.br\\\/blog\\\/2023\\\/06\\\/20\\\/novidade-do-php-8-3\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\\\/\\\/soloweb.com.br\\\/blog\\\/2023\\\/06\\\/20\\\/novidade-do-php-8-3\\\/#primaryimage\",\"url\":\"https:\\\/\\\/soloweb.com.br\\\/blog\\\/wp-content\\\/uploads\\\/2023\\\/06\\\/WhatsApp-Image-2023-06-20-at-09.06.09.jpeg\",\"contentUrl\":\"https:\\\/\\\/soloweb.com.br\\\/blog\\\/wp-content\\\/uploads\\\/2023\\\/06\\\/WhatsApp-Image-2023-06-20-at-09.06.09.jpeg\",\"width\":940,\"height\":787},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/soloweb.com.br\\\/blog\\\/2023\\\/06\\\/20\\\/novidade-do-php-8-3\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"In\u00edcio\",\"item\":\"https:\\\/\\\/soloweb.com.br\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Novidade do PHP 8.3\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/soloweb.com.br\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/soloweb.com.br\\\/blog\\\/\",\"name\":\"SOLOWEB Tecnologia\",\"description\":\"SOLOWEB Tecnologia\",\"publisher\":{\"@id\":\"https:\\\/\\\/soloweb.com.br\\\/blog\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/soloweb.com.br\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-BR\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/soloweb.com.br\\\/blog\\\/#organization\",\"name\":\"SOLOWEB Tecnologia\",\"url\":\"https:\\\/\\\/soloweb.com.br\\\/blog\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\\\/\\\/soloweb.com.br\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/soloweb.com.br\\\/blog\\\/wp-content\\\/uploads\\\/2022\\\/04\\\/cropped-solo.png\",\"contentUrl\":\"https:\\\/\\\/soloweb.com.br\\\/blog\\\/wp-content\\\/uploads\\\/2022\\\/04\\\/cropped-solo.png\",\"width\":341,\"height\":94,\"caption\":\"SOLOWEB Tecnologia\"},\"image\":{\"@id\":\"https:\\\/\\\/soloweb.com.br\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/soloweb.com.br\\\/blog\\\/#\\\/schema\\\/person\\\/b10ff5bc260b411c2d82b19fad8ae3f1\",\"name\":\"Carlos Rolim\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\\\/\\\/soloweb.com.br\\\/blog\\\/wp-content\\\/uploads\\\/2023\\\/01\\\/avatar_user_4_1674993909-96x96.png\",\"url\":\"https:\\\/\\\/soloweb.com.br\\\/blog\\\/wp-content\\\/uploads\\\/2023\\\/01\\\/avatar_user_4_1674993909-96x96.png\",\"contentUrl\":\"https:\\\/\\\/soloweb.com.br\\\/blog\\\/wp-content\\\/uploads\\\/2023\\\/01\\\/avatar_user_4_1674993909-96x96.png\",\"caption\":\"Carlos Rolim\"},\"sameAs\":[\"http:\\\/\\\/carlosrolim.com\"],\"url\":\"https:\\\/\\\/soloweb.com.br\\\/blog\\\/author\\\/carlos\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Novidade do PHP 8.3 - SOLOWEB Tecnologia","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:\/\/soloweb.com.br\/blog\/2023\/06\/20\/novidade-do-php-8-3\/","og_locale":"pt_BR","og_type":"article","og_title":"Novidade do PHP 8.3 - SOLOWEB Tecnologia","og_description":"O PHP 8.3 ainda n\u00e3o foi lan\u00e7ado oficialmente, mas sua vers\u00e3o alfa est\u00e1 dispon\u00edvel. De acordo com a&nbsp;lista de tarefas","og_url":"https:\/\/soloweb.com.br\/blog\/2023\/06\/20\/novidade-do-php-8-3\/","og_site_name":"SOLOWEB Tecnologia","article_published_time":"2023-06-20T12:08:58+00:00","article_modified_time":"2023-06-30T14:27:45+00:00","og_image":[{"width":940,"height":787,"url":"https:\/\/soloweb.com.br\/blog\/wp-content\/uploads\/2023\/06\/WhatsApp-Image-2023-06-20-at-09.06.09.jpeg","type":"image\/jpeg"}],"author":"Carlos Rolim","twitter_card":"summary_large_image","twitter_misc":{"Escrito por":"Carlos Rolim","Est. tempo de leitura":"7 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/soloweb.com.br\/blog\/2023\/06\/20\/novidade-do-php-8-3\/#article","isPartOf":{"@id":"https:\/\/soloweb.com.br\/blog\/2023\/06\/20\/novidade-do-php-8-3\/"},"author":{"name":"Carlos Rolim","@id":"https:\/\/soloweb.com.br\/blog\/#\/schema\/person\/b10ff5bc260b411c2d82b19fad8ae3f1"},"headline":"Novidade do PHP 8.3","datePublished":"2023-06-20T12:08:58+00:00","dateModified":"2023-06-30T14:27:45+00:00","mainEntityOfPage":{"@id":"https:\/\/soloweb.com.br\/blog\/2023\/06\/20\/novidade-do-php-8-3\/"},"wordCount":1453,"publisher":{"@id":"https:\/\/soloweb.com.br\/blog\/#organization"},"image":{"@id":"https:\/\/soloweb.com.br\/blog\/2023\/06\/20\/novidade-do-php-8-3\/#primaryimage"},"thumbnailUrl":"https:\/\/soloweb.com.br\/blog\/wp-content\/uploads\/2023\/06\/WhatsApp-Image-2023-06-20-at-09.06.09.jpeg","keywords":["PHP","php8.3"],"articleSection":["Destaque Secund\u00e1rio","PHP","Programa\u00e7\u00e3o"],"inLanguage":"pt-BR"},{"@type":"WebPage","@id":"https:\/\/soloweb.com.br\/blog\/2023\/06\/20\/novidade-do-php-8-3\/","url":"https:\/\/soloweb.com.br\/blog\/2023\/06\/20\/novidade-do-php-8-3\/","name":"Novidade do PHP 8.3 - SOLOWEB Tecnologia","isPartOf":{"@id":"https:\/\/soloweb.com.br\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/soloweb.com.br\/blog\/2023\/06\/20\/novidade-do-php-8-3\/#primaryimage"},"image":{"@id":"https:\/\/soloweb.com.br\/blog\/2023\/06\/20\/novidade-do-php-8-3\/#primaryimage"},"thumbnailUrl":"https:\/\/soloweb.com.br\/blog\/wp-content\/uploads\/2023\/06\/WhatsApp-Image-2023-06-20-at-09.06.09.jpeg","datePublished":"2023-06-20T12:08:58+00:00","dateModified":"2023-06-30T14:27:45+00:00","breadcrumb":{"@id":"https:\/\/soloweb.com.br\/blog\/2023\/06\/20\/novidade-do-php-8-3\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/soloweb.com.br\/blog\/2023\/06\/20\/novidade-do-php-8-3\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/soloweb.com.br\/blog\/2023\/06\/20\/novidade-do-php-8-3\/#primaryimage","url":"https:\/\/soloweb.com.br\/blog\/wp-content\/uploads\/2023\/06\/WhatsApp-Image-2023-06-20-at-09.06.09.jpeg","contentUrl":"https:\/\/soloweb.com.br\/blog\/wp-content\/uploads\/2023\/06\/WhatsApp-Image-2023-06-20-at-09.06.09.jpeg","width":940,"height":787},{"@type":"BreadcrumbList","@id":"https:\/\/soloweb.com.br\/blog\/2023\/06\/20\/novidade-do-php-8-3\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"In\u00edcio","item":"https:\/\/soloweb.com.br\/blog\/"},{"@type":"ListItem","position":2,"name":"Novidade do PHP 8.3"}]},{"@type":"WebSite","@id":"https:\/\/soloweb.com.br\/blog\/#website","url":"https:\/\/soloweb.com.br\/blog\/","name":"SOLOWEB Tecnologia","description":"SOLOWEB Tecnologia","publisher":{"@id":"https:\/\/soloweb.com.br\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/soloweb.com.br\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-BR"},{"@type":"Organization","@id":"https:\/\/soloweb.com.br\/blog\/#organization","name":"SOLOWEB Tecnologia","url":"https:\/\/soloweb.com.br\/blog\/","logo":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/soloweb.com.br\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/soloweb.com.br\/blog\/wp-content\/uploads\/2022\/04\/cropped-solo.png","contentUrl":"https:\/\/soloweb.com.br\/blog\/wp-content\/uploads\/2022\/04\/cropped-solo.png","width":341,"height":94,"caption":"SOLOWEB Tecnologia"},"image":{"@id":"https:\/\/soloweb.com.br\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/soloweb.com.br\/blog\/#\/schema\/person\/b10ff5bc260b411c2d82b19fad8ae3f1","name":"Carlos Rolim","image":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/soloweb.com.br\/blog\/wp-content\/uploads\/2023\/01\/avatar_user_4_1674993909-96x96.png","url":"https:\/\/soloweb.com.br\/blog\/wp-content\/uploads\/2023\/01\/avatar_user_4_1674993909-96x96.png","contentUrl":"https:\/\/soloweb.com.br\/blog\/wp-content\/uploads\/2023\/01\/avatar_user_4_1674993909-96x96.png","caption":"Carlos Rolim"},"sameAs":["http:\/\/carlosrolim.com"],"url":"https:\/\/soloweb.com.br\/blog\/author\/carlos\/"}]}},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/soloweb.com.br\/blog\/wp-json\/wp\/v2\/posts\/18107","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/soloweb.com.br\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/soloweb.com.br\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/soloweb.com.br\/blog\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/soloweb.com.br\/blog\/wp-json\/wp\/v2\/comments?post=18107"}],"version-history":[{"count":3,"href":"https:\/\/soloweb.com.br\/blog\/wp-json\/wp\/v2\/posts\/18107\/revisions"}],"predecessor-version":[{"id":18115,"href":"https:\/\/soloweb.com.br\/blog\/wp-json\/wp\/v2\/posts\/18107\/revisions\/18115"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/soloweb.com.br\/blog\/wp-json\/wp\/v2\/media\/18109"}],"wp:attachment":[{"href":"https:\/\/soloweb.com.br\/blog\/wp-json\/wp\/v2\/media?parent=18107"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/soloweb.com.br\/blog\/wp-json\/wp\/v2\/categories?post=18107"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/soloweb.com.br\/blog\/wp-json\/wp\/v2\/tags?post=18107"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}