{"id":65417,"date":"2023-12-02T04:26:28","date_gmt":"2023-12-02T07:26:28","guid":{"rendered":"https:\/\/kinsta.com\/pt\/?p=65417&#038;preview=true&#038;preview_id=65417"},"modified":"2023-12-04T07:10:41","modified_gmt":"2023-12-04T10:10:41","slug":"php-8-3","status":"publish","type":"post","link":"https:\/\/kinsta.com\/pt\/blog\/php-8-3\/","title":{"rendered":"PHP 8.3: O Que H\u00e1 de Novo e O Que Mudou na \u00daltima Vers\u00e3o"},"content":{"rendered":"<p>O PHP 8.3 foi lan\u00e7ado no prazo previsto, em 23 de novembro, e inclui muitos recursos novos e melhorias desde o <a href=\"https:\/\/kinsta.com\/pt\/blog\/php-8-2\/\">lan\u00e7amento do PHP 8.2<\/a>. Embora seja oficialmente considerada uma vers\u00e3o secund\u00e1ria, algumas das mudan\u00e7as na vers\u00e3o 8.3 podem afetar diretamente seu trabalho com PHP, inclusive ajudando voc\u00ea a codificar mais rapidamente e com menos bugs.<\/p>\n<p>Vamos nos aprofundar e analisar as grandes \u2014 ou n\u00e3o t\u00e3o grandes \u2014 mudan\u00e7as que v\u00eam com essa \u00faltima vers\u00e3o.<\/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>Novos recursos e melhorias no PHP 8.3<\/h2>\n<p>Vamos come\u00e7ar explorando os recursos do PHP 8.3 que mais chamam a aten\u00e7\u00e3o.<\/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 classe tipadas<\/h3>\n<p>A capacidade de declarar tipos para propriedades de classes tem estado dispon\u00edvel desde o <a href=\"https:\/\/kinsta.com\/pt\/blog\/php-7-4\/\">PHP 7.4<\/a>. No entanto, apesar de v\u00e1rios ajustes na tipagem do PHP ao longo dos anos, isso n\u00e3o se estendia \u00e0s constantes \u2014 at\u00e9 agora.<\/p>\n<p>Constantes de classes \u2014 e isso tamb\u00e9m inclui constantes de interfaces, traits e enums \u2014 podem ser tipadas no PHP 8.3, tornando menos prov\u00e1vel que os desenvolvedores se desviem da inten\u00e7\u00e3o por tr\u00e1s da declara\u00e7\u00e3o inicial de uma constante.<\/p>\n<p>Aqui est\u00e1 um exemplo b\u00e1sico usando uma interface:<\/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>O verdadeiro valor dessas <a href=\"https:\/\/wiki.php.net\/rfc\/typed_class_constants\" target=\"_blank\" rel=\"noopener noreferrer\">constantes de classe tipadas<\/a> \u00e9 revelado quando trabalhamos em classes derivadas das declara\u00e7\u00f5es base. Embora uma classe filha possa frequentemente atribuir um novo valor a uma constante, o PHP 8.3 pode ajudar a prevenir altera\u00e7\u00f5es acidentais no seu tipo de modo que ela se torne incompat\u00edvel com a declara\u00e7\u00e3o 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>Lembre-se de que o tipo atribu\u00eddo a uma constante de classe pode variar ao &#8220;restringir&#8221; m\u00faltiplos tipos ou ao usar um tipo de outra forma compat\u00edvel:<\/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>Dois tipos suportados para outras propriedades ao validar valores de retorno \u2014 <code>void<\/code> e <code>never<\/code> \u2014 n\u00e3o s\u00e3o suportados como tipos de constantes de classe.<\/p>\n<h3>Uma nova fun\u00e7\u00e3o <code>json_validate()<\/code><\/h3>\n<p>Ao trabalhar com dados codificados em JSON, \u00e9 melhor saber se o payload \u00e9 sintaticamente v\u00e1lido antes de tentar fazer algo com ele.<\/p>\n<p>Em vers\u00f5es anteriores do PHP, os desenvolvedores usavam a fun\u00e7\u00e3o <code>json_decode()<\/code> e verificavam se havia erros quando essa fun\u00e7\u00e3o tentava transformar dados JSON em arrays associativos ou objetos. A nova fun\u00e7\u00e3o <code><a href=\"https:\/\/www.php.net\/manual\/en\/function.json-validate.php\" target=\"_blank\" rel=\"noopener noreferrer\">json_validate()<\/a><\/code> do PHP 8.3 faz a verifica\u00e7\u00e3o de erros sem usar toda a mem\u00f3ria necess\u00e1ria para criar essas estruturas de arrays ou objetos.<\/p>\n<p>Portanto, no passado, voc\u00ea poderia validar um payload JSON mais ou menos assim:<\/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>Se voc\u00ea n\u00e3o for fazer algo imediatamente com <code>$obj<\/code> no exemplo acima, s\u00e3o muitos recursos usados apenas para confirmar a validade do payload JSON original. No PHP 8.3, voc\u00ea pode poupar um pouco de mem\u00f3ria fazendo algo assim:<\/p>\n<pre><code class=\"language-php\">if (json_validate($maybeJSON)) {\n    \/\/ Do something with $maybeJSON   \n}<\/code><\/pre>\n<p><strong>Observa\u00e7\u00e3o:<\/strong> N\u00e3o faz muito sentido usar <code>json_validate()<\/code> e, em seguida, executar imediatamente os dados em <code>json_decode()<\/code>, ainda usando os recursos de mem\u00f3ria do decode. Provavelmente voc\u00ea ir\u00e1 preferir usar a nova fun\u00e7\u00e3o para validar o JSON antes de armazen\u00e1-lo em algum lugar ou entreg\u00e1-lo como resposta a uma solicita\u00e7\u00e3o.<\/p>\n<h3>Clonagem profunda de propriedades <code>readonly<\/code><\/h3>\n<p>A capacidade de declarar propriedades de classe individuais como <code>readonly<\/code> apareceu no <a href=\"https:\/\/kinsta.com\/pt\/blog\/php-8-1\/\">PHP 8.1<\/a>. O PHP 8.2 introduziu a capacidade de designar esse atributo a <a href=\"https:\/\/kinsta.com\/pt\/blog\/php-8-2\/#new-readonly-classes\" target=\"_blank\" rel=\"noopener noreferrer\">uma classe inteira<\/a>. No entanto, muitos desenvolvedores sentiram que as restri\u00e7\u00f5es impostas ao trabalhar com classes que continham tais propriedades dificultavam realizar uma programa\u00e7\u00e3o mais \u00fatil.<\/p>\n<p>Uma RFC para <a href=\"https:\/\/wiki.php.net\/rfc\/readonly_amendments\" target=\"_blank\" rel=\"noopener noreferrer\">modificar o comportamento do <code>readonly<\/code><\/a>\u00a0fez duas propostas:<\/p>\n<ol>\n<li>Permitir que classes que n\u00e3o s\u00e3o <code>readonly<\/code> estendam classes que s\u00e3o<\/li>\n<li>Permitir que propriedades <code>readonly<\/code> sejam reinicializadas ao clonar<\/li>\n<\/ol>\n<p>A segunda proposta foi inclu\u00edda no PHP 8.3. A nova abordagem permite que inst\u00e2ncias de uma classe com propriedades <code>readonly<\/code> sejam reinicializadas no m\u00e9todo m\u00e1gico <code>__clone<\/code> (inclusive por meio de fun\u00e7\u00f5es invocadas desde <code>__clone<\/code>).<\/p>\n<p>Este exemplo de c\u00f3digo da RFC mostra como isso 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>Novo atributo <code>#[\\Override]<\/code><\/h3>\n<p>Ao implementar interfaces no PHP, os programadores fornecem funcionalidades detalhadas para os m\u00e9todos nomeados nessas interfaces. Ao criar uma inst\u00e2ncia de uma classe, os programadores podem substituir um m\u00e9todo principal criando uma vers\u00e3o alternativa com o mesmo nome e uma assinatura compat\u00edvel na classe filha.<\/p>\n<p>Um problema \u00e9 que os programadores podem <em>pensar<\/em> que est\u00e3o implementando um m\u00e9todo de interface ou substituindo um m\u00e9todo principal quando n\u00e3o est\u00e3o. Eles podem estar criando uma entidade totalmente separada devido a um erro de digita\u00e7\u00e3o no nome do m\u00e9todo da classe filha ou porque os m\u00e9todos foram removidos ou renomeados no c\u00f3digo principal.<\/p>\n<p>O PHP 8.3 introduziu o atributo <code>#[\\Override]<\/code> para ajudar os programadores a deixar claro que um m\u00e9todo deve ter alguma linhagem dentro do c\u00f3digo.<\/p>\n<p>Aqui est\u00e1 um exemplo 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>Busca din\u00e2mica de constantes de classe e membros de Enum<\/h3>\n<p>Diferentemente de outras propriedades no c\u00f3digo PHP, a busca de constantes de classe e membros de Enum com nomes de vari\u00e1veis tem sido um pouco complicada. Antes do PHP 8.3, voc\u00ea talvez fizesse isso usando a fun\u00e7\u00e3o <code>constant()<\/code> desta 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>Agora, usando as mesmas defini\u00e7\u00f5es de classe e de Enum acima, voc\u00ea pode obter o mesmo resultado no PHP 8.3 com a <a href=\"https:\/\/wiki.php.net\/rfc\/dynamic_class_constant_fetch\" target=\"_blank\" rel=\"noopener noreferrer\">busca din\u00e2mica de constantes<\/a> desta 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>Novo m\u00e9todo <code>getBytesFromString()<\/code><\/h3>\n<p>Voc\u00ea j\u00e1 quis gerar strings aleat\u00f3rias usando uma cole\u00e7\u00e3o pr\u00e9-aprovada de caracteres? Agora voc\u00ea pode fazer isso facilmente com o m\u00e9todo <code><a href=\"https:\/\/www.php.net\/manual\/en\/random-randomizer.getbytesfromstring.php\" target=\"_blank\" rel=\"noopener noreferrer\">getBytesFromString()<\/a><\/code>, que foi adicionado \u00e0 extens\u00e3o Random do PHP 8.3.<\/p>\n<p>Esse novo m\u00e9todo \u00e9 simples: voc\u00ea passa a ele uma string de caracteres como material de origem e especifica quantos deles deseja usar. Em seguida, o m\u00e9todo selecionar\u00e1 bytes da string aleatoriamente at\u00e9 atingir o comprimento especificado.<\/p>\n<p>Um exemplo simples:<\/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>\u00c9 poss\u00edvel que o comprimento solicitado da sa\u00edda aleat\u00f3ria tenha mais bytes do que a string 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>Com uma string de entrada de caracteres exclusivos, cada um tem a mesma chance de ser selecionado para o resultado aleat\u00f3rio. No entanto, os caracteres podem ser ponderados se aparecerem com mais frequ\u00eancia do que outros na entrada. Por exemplo:<\/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>Novos m\u00e9todos <code>getFloat()<\/code> e <code>nextFloat()<\/code><\/h3>\n<p>Tamb\u00e9m expandindo a extens\u00e3o Random, o PHP 8.3 apresenta dois novos m\u00e9todos para gerar valores aleat\u00f3rios de float: <code>getFloat()<\/code> e <code>nextFloat()<\/code>.<\/p>\n<p>Por exemplo:<\/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>O m\u00e9todo <code>getFloat()<\/code> tamb\u00e9m aceita um terceiro par\u00e2metro ap\u00f3s os valores m\u00ednimo e m\u00e1ximo. Usando um Enum <strong>Random\\IntervalBoundary<\/strong>, voc\u00ea pode determinar se os pr\u00f3prios valores m\u00ednimo e m\u00e1ximo podem ser retornados pela fun\u00e7\u00e3o.<\/p>\n<p>Estas s\u00e3o as regras:<\/p>\n<ul>\n<li>IntervalBoundary::ClosedOpen: o m\u00ednimo pode ser retornado, mas n\u00e3o o m\u00e1ximo<\/li>\n<li>IntervalBoundary::ClosedClosed: tanto o m\u00ednimo quanto o m\u00e1ximo podem ser retornados<\/li>\n<li>IntervalBoundary::OpenClosed: o m\u00ednimo n\u00e3o pode ser retornado, mas o m\u00e1ximo pode<\/li>\n<li>IntervalBoundary::OpenOpen: nem o m\u00ednimo nem o m\u00e1ximo podem ser retornados<\/li>\n<\/ul>\n<p>Ao usar <code>getFloat()<\/code> sem especificar o Enum como terceiro par\u00e2metro, o padr\u00e3o \u00e9 <strong>IntervalBoundary::ClosedOpen<\/strong>.<\/p>\n<p>Um exemplo \u00fatil fornecido pela <a href=\"https:\/\/www.php.net\/manual\/en\/random-randomizer.getfloat.php\" target=\"_blank\" rel=\"noopener noreferrer\">documenta\u00e7\u00e3o da nova fun\u00e7\u00e3o<\/a> gera coordenadas aleat\u00f3rias de longitude e latitude, em que as latitudes podem incluir -90 e 90, mas a longitude n\u00e3o pode incluir -180 e 180 (pois s\u00e3o a mesma):<\/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>O novo m\u00e9todo <code>nextFloat()<\/code> \u00e9 essencialmente o mesmo que usar <code>getFloat()<\/code> para solicitar um valor aleat\u00f3rio que varia 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>Outras pequenas mudan\u00e7as no PHP 8.3<\/h2>\n<p>O PHP 8.3 tamb\u00e9m inclui v\u00e1rias outras fun\u00e7\u00f5es novas e pequenas mudan\u00e7as. Vamos mencion\u00e1-las abaixo com links para recursos adicionais (quando dispon\u00edveis):<\/p>\n<ul>\n<li>Novos m\u00e9todos para a classe 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() e <a href=\"https:\/\/www.php.net\/manual\/en\/domparentnode.replacechildren.php\" target=\"_blank\" rel=\"noopener noreferrer\"><code>MParentNode::replaceChildren()<\/code><\/a>.<\/li>\n<li>Novos m\u00e9todos para a classe 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>\u00a0e <a href=\"https:\/\/www.php.net\/manual\/en\/intlgregoriancalendar.createfromdatetime.php\" target=\"_blank\" rel=\"noopener noreferrer\"><code>IntlGregorianCalendar::createFromDateTime()<\/code><\/a>.<\/li>\n<li>Novas fun\u00e7\u00f5es LDAP: ldap_connect_wallet() e ldap_exop_sync().<\/li>\n<li>Nova fun\u00e7\u00e3o <a href=\"https:\/\/www.php.net\/manual\/en\/function.mb-str-pad.php\" target=\"_blank\" rel=\"noopener noreferrer\"><code>mb_str_pad()<\/code><\/a> de string multibyte.<\/li>\n<li>Novas fun\u00e7\u00f5es 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>\u00a0e <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>Novo m\u00e9todo <a href=\"https:\/\/www.php.net\/manual\/en\/reflectionmethod.createfrommethodname.php\" target=\"_blank\" rel=\"noopener noreferrer\"><code>ReflectionMethod::createFromMethodName()<\/code><\/a>.<\/li>\n<li>Nova fun\u00e7\u00e3o 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>Novas fun\u00e7\u00f5es de string: <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>\u00a0e\u00a0<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>Novo m\u00e9todo da classe 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>Nova configura\u00e7\u00e3o INI para definir o tamanho m\u00e1ximo permitido do stack: <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>Deprecia\u00e7\u00f5es no PHP 8.3<\/h2>\n<p>A cada nova vers\u00e3o do PHP, algumas fun\u00e7\u00f5es e configura\u00e7\u00f5es s\u00e3o sinalizadas para eventual remo\u00e7\u00e3o. Uma vez depreciados esses recursos, continuar a us\u00e1-los n\u00e3o \u00e9 recomendado, e eles gerar\u00e3o avisos em muitos registros quando aparecerem na execu\u00e7\u00e3o do c\u00f3digo.<\/p>\n<p>Aqui est\u00e1 uma lista de deprecia\u00e7\u00f5es no PHP 8.3, com links para informa\u00e7\u00f5es adicionais:<\/p>\n<ul>\n<li>A constante U_MULTIPLE_DECIMAL_SEPERATORS foi depreciada em favor de U_MULTIPLE_DECIMAL_SEPARATORS.<\/li>\n<li>A 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 foi depreciada.<\/li>\n<li><a href=\"https:\/\/www.php.net\/manual\/en\/reflectionclass.getstaticproperties.php\" target=\"_blank\" rel=\"noopener noreferrer\"><code>ReflectionClass::getStaticProperties()<\/code><\/a> n\u00e3o \u00e9 mais anul\u00e1vel.<\/li>\n<li>Configura\u00e7\u00f5es 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>\u00a0e <a href=\"https:\/\/www.php.net\/manual\/en\/info.configuration.php#ini.assert.warning\" target=\"_blank\" rel=\"noopener noreferrer\"><code>assert.warning<\/code><\/a> foram depreciadas.<\/li>\n<li>Chamar <a href=\"https:\/\/www.php.net\/manual\/en\/function.get-class.php\" target=\"_blank\" rel=\"noopener noreferrer\"><code>get_class()<\/code><\/a> e <a href=\"https:\/\/www.php.net\/manual\/en\/function.get-parent-class.php\" target=\"_blank\" rel=\"noopener noreferrer\"><code>get_parent_class()<\/code><\/a> sem argumentos foi depreciado.<\/li>\n<\/ul>\n<h2>Resumo<\/h2>\n<p>Analisamos as mudan\u00e7as significativas inclu\u00eddas no PHP 8.3. Para uma lista detalhada de cada atualiza\u00e7\u00e3o dessa vers\u00e3o, consulte o <a href=\"https:\/\/www.php.net\/ChangeLog-8.php#PHP_8_3\" target=\"_blank\" rel=\"noopener noreferrer\">changelog oficial<\/a> da vers\u00e3o. Se voc\u00ea planeja mover seu c\u00f3digo para uma plataforma que execute o PHP mais recente, o <a href=\"https:\/\/www.php.net\/manual\/en\/migration83.php\" target=\"_blank\" rel=\"noopener noreferrer\">Guia de Migra\u00e7\u00e3o de 8.2 para 8.3<\/a> pode ajud\u00e1-lo a n\u00e3o ter problemas.<\/p>\n<p>Se voc\u00ea tem o encargo de instalar o PHP em seus servidores de desenvolvimento ou produ\u00e7\u00e3o, a vers\u00e3o 8.3 est\u00e1 <a href=\"https:\/\/www.php.net\/downloads.php\" target=\"_blank\" rel=\"noopener noreferrer\">pronta para download<\/a> agora.<\/p>\n<p>Se voc\u00ea \u00e9 um cliente Kinsta, pode confiar em n\u00f3s para disponibilizar essa vers\u00e3o nos servidores por tr\u00e1s de seus projetos de <a href=\"https:\/\/kinsta.com\/pt\/hospedagem-wordpress\/\">Hospedagem Gerenciada de WordPress<\/a> ou <a href=\"https:\/\/sevalla.com\/application-hosting\/\">Hospedagem de Aplicativos<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>O PHP 8.3 foi lan\u00e7ado no prazo previsto, em 23 de novembro, e inclui muitos recursos novos e melhorias desde o lan\u00e7amento do PHP 8.2. Embora &#8230;<\/p>\n","protected":false},"author":259,"featured_media":65418,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[],"topic":[998],"class_list":["post-65417","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","topic-atualizacoes-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: O Que H\u00e1 de Novo e O Que Mudou na \u00daltima Vers\u00e3o<\/title>\n<meta name=\"description\" content=\"O PHP 8.3 j\u00e1 foi lan\u00e7ado, conforme programado, e analisamos alguns dos novos e mais importantes recursos e atualiza\u00e7\u00f5es dessa vers\u00e3o.\" \/>\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\/pt\/blog\/php-8-3\/\" \/>\n<meta property=\"og:locale\" content=\"pt_PT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"PHP 8.3: O Que H\u00e1 de Novo e O Que Mudou na \u00daltima Vers\u00e3o\" \/>\n<meta property=\"og:description\" content=\"O PHP 8.3 j\u00e1 foi lan\u00e7ado, conforme programado, e analisamos alguns dos novos e mais importantes recursos e atualiza\u00e7\u00f5es dessa vers\u00e3o.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/pt\/blog\/php-8-3\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/kinstapt\/\" \/>\n<meta property=\"article:published_time\" content=\"2023-12-02T07:26:28+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-12-04T10:10:41+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/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=\"O PHP 8.3 j\u00e1 foi lan\u00e7ado, conforme programado, e analisamos alguns dos novos e mais importantes recursos e atualiza\u00e7\u00f5es dessa vers\u00e3o.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/11\/whats-new-in-php-83.png\" \/>\n<meta name=\"twitter:creator\" content=\"@kinsta_pt\" \/>\n<meta name=\"twitter:site\" content=\"@kinsta_pt\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Steve Bonisteel\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tempo estimado de leitura\" \/>\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\/pt\/blog\/php-8-3\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/php-8-3\/\"},\"author\":{\"name\":\"Steve Bonisteel\",\"@id\":\"https:\/\/kinsta.com\/pt\/#\/schema\/person\/d84ceff87bd64a4368a581fc8aa8bd6f\"},\"headline\":\"PHP 8.3: O Que H\u00e1 de Novo e O Que Mudou na \u00daltima Vers\u00e3o\",\"datePublished\":\"2023-12-02T07:26:28+00:00\",\"dateModified\":\"2023-12-04T10:10:41+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/php-8-3\/\"},\"wordCount\":1543,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/pt\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/php-8-3\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/11\/whats-new-in-php-83.png\",\"inLanguage\":\"pt-PT\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinsta.com\/pt\/blog\/php-8-3\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/php-8-3\/\",\"url\":\"https:\/\/kinsta.com\/pt\/blog\/php-8-3\/\",\"name\":\"PHP 8.3: O Que H\u00e1 de Novo e O Que Mudou na \u00daltima Vers\u00e3o\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/pt\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/php-8-3\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/php-8-3\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/11\/whats-new-in-php-83.png\",\"datePublished\":\"2023-12-02T07:26:28+00:00\",\"dateModified\":\"2023-12-04T10:10:41+00:00\",\"description\":\"O PHP 8.3 j\u00e1 foi lan\u00e7ado, conforme programado, e analisamos alguns dos novos e mais importantes recursos e atualiza\u00e7\u00f5es dessa vers\u00e3o.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/php-8-3\/#breadcrumb\"},\"inLanguage\":\"pt-PT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/pt\/blog\/php-8-3\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-PT\",\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/php-8-3\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/11\/whats-new-in-php-83.png\",\"contentUrl\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/11\/whats-new-in-php-83.png\",\"width\":1460,\"height\":730},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/php-8-3\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/pt\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Atualiza\u00e7\u00f5es do PHP\",\"item\":\"https:\/\/kinsta.com\/pt\/topicos\/atualizacoes-php\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"PHP 8.3: O Que H\u00e1 de Novo e O Que Mudou na \u00daltima Vers\u00e3o\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinsta.com\/pt\/#website\",\"url\":\"https:\/\/kinsta.com\/pt\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Solu\u00e7\u00f5es de hospedagem Premium, r\u00e1pida e segura\",\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/pt\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinsta.com\/pt\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-PT\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinsta.com\/pt\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/pt\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-PT\",\"@id\":\"https:\/\/kinsta.com\/pt\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/pt\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/kinstapt\/\",\"https:\/\/x.com\/kinsta_pt\",\"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\/pt\/#\/schema\/person\/d84ceff87bd64a4368a581fc8aa8bd6f\",\"name\":\"Steve Bonisteel\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-PT\",\"@id\":\"https:\/\/kinsta.com\/pt\/#\/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\/pt\/blog\/author\/stevebonisteel\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"PHP 8.3: O Que H\u00e1 de Novo e O Que Mudou na \u00daltima Vers\u00e3o","description":"O PHP 8.3 j\u00e1 foi lan\u00e7ado, conforme programado, e analisamos alguns dos novos e mais importantes recursos e atualiza\u00e7\u00f5es dessa vers\u00e3o.","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\/pt\/blog\/php-8-3\/","og_locale":"pt_PT","og_type":"article","og_title":"PHP 8.3: O Que H\u00e1 de Novo e O Que Mudou na \u00daltima Vers\u00e3o","og_description":"O PHP 8.3 j\u00e1 foi lan\u00e7ado, conforme programado, e analisamos alguns dos novos e mais importantes recursos e atualiza\u00e7\u00f5es dessa vers\u00e3o.","og_url":"https:\/\/kinsta.com\/pt\/blog\/php-8-3\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/kinstapt\/","article_published_time":"2023-12-02T07:26:28+00:00","article_modified_time":"2023-12-04T10:10:41+00:00","og_image":[{"width":1460,"height":730,"url":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/11\/whats-new-in-php-83.png","type":"image\/png"}],"author":"Steve Bonisteel","twitter_card":"summary_large_image","twitter_description":"O PHP 8.3 j\u00e1 foi lan\u00e7ado, conforme programado, e analisamos alguns dos novos e mais importantes recursos e atualiza\u00e7\u00f5es dessa vers\u00e3o.","twitter_image":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/11\/whats-new-in-php-83.png","twitter_creator":"@kinsta_pt","twitter_site":"@kinsta_pt","twitter_misc":{"Escrito por":"Steve Bonisteel","Tempo estimado de leitura":"9 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/pt\/blog\/php-8-3\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/pt\/blog\/php-8-3\/"},"author":{"name":"Steve Bonisteel","@id":"https:\/\/kinsta.com\/pt\/#\/schema\/person\/d84ceff87bd64a4368a581fc8aa8bd6f"},"headline":"PHP 8.3: O Que H\u00e1 de Novo e O Que Mudou na \u00daltima Vers\u00e3o","datePublished":"2023-12-02T07:26:28+00:00","dateModified":"2023-12-04T10:10:41+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/pt\/blog\/php-8-3\/"},"wordCount":1543,"commentCount":0,"publisher":{"@id":"https:\/\/kinsta.com\/pt\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/pt\/blog\/php-8-3\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/11\/whats-new-in-php-83.png","inLanguage":"pt-PT","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinsta.com\/pt\/blog\/php-8-3\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/pt\/blog\/php-8-3\/","url":"https:\/\/kinsta.com\/pt\/blog\/php-8-3\/","name":"PHP 8.3: O Que H\u00e1 de Novo e O Que Mudou na \u00daltima Vers\u00e3o","isPartOf":{"@id":"https:\/\/kinsta.com\/pt\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/pt\/blog\/php-8-3\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/pt\/blog\/php-8-3\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/11\/whats-new-in-php-83.png","datePublished":"2023-12-02T07:26:28+00:00","dateModified":"2023-12-04T10:10:41+00:00","description":"O PHP 8.3 j\u00e1 foi lan\u00e7ado, conforme programado, e analisamos alguns dos novos e mais importantes recursos e atualiza\u00e7\u00f5es dessa vers\u00e3o.","breadcrumb":{"@id":"https:\/\/kinsta.com\/pt\/blog\/php-8-3\/#breadcrumb"},"inLanguage":"pt-PT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/pt\/blog\/php-8-3\/"]}]},{"@type":"ImageObject","inLanguage":"pt-PT","@id":"https:\/\/kinsta.com\/pt\/blog\/php-8-3\/#primaryimage","url":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/11\/whats-new-in-php-83.png","contentUrl":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/11\/whats-new-in-php-83.png","width":1460,"height":730},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/pt\/blog\/php-8-3\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/pt\/"},{"@type":"ListItem","position":2,"name":"Atualiza\u00e7\u00f5es do PHP","item":"https:\/\/kinsta.com\/pt\/topicos\/atualizacoes-php\/"},{"@type":"ListItem","position":3,"name":"PHP 8.3: O Que H\u00e1 de Novo e O Que Mudou na \u00daltima Vers\u00e3o"}]},{"@type":"WebSite","@id":"https:\/\/kinsta.com\/pt\/#website","url":"https:\/\/kinsta.com\/pt\/","name":"Kinsta\u00ae","description":"Solu\u00e7\u00f5es de hospedagem Premium, r\u00e1pida e segura","publisher":{"@id":"https:\/\/kinsta.com\/pt\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinsta.com\/pt\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-PT"},{"@type":"Organization","@id":"https:\/\/kinsta.com\/pt\/#organization","name":"Kinsta","url":"https:\/\/kinsta.com\/pt\/","logo":{"@type":"ImageObject","inLanguage":"pt-PT","@id":"https:\/\/kinsta.com\/pt\/#\/schema\/logo\/image\/","url":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinsta.com\/pt\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/kinstapt\/","https:\/\/x.com\/kinsta_pt","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\/pt\/#\/schema\/person\/d84ceff87bd64a4368a581fc8aa8bd6f","name":"Steve Bonisteel","image":{"@type":"ImageObject","inLanguage":"pt-PT","@id":"https:\/\/kinsta.com\/pt\/#\/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\/pt\/blog\/author\/stevebonisteel\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/posts\/65417","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/users\/259"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/comments?post=65417"}],"version-history":[{"count":13,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/posts\/65417\/revisions"}],"predecessor-version":[{"id":65581,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/posts\/65417\/revisions\/65581"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/65417\/translations\/en"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/65417\/translations\/it"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/65417\/translations\/pt"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/65417\/translations\/fr"},{"embeddable":true,"hreflang":"ja","title":"Japanese","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/65417\/translations\/jp"},{"embeddable":true,"hreflang":"nl","title":"Dutch","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/65417\/translations\/nl"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/65417\/translations\/es"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/65417\/translations\/de"},{"href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/65417\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/media\/65418"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/media?parent=65417"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/tags?post=65417"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/topic?post=65417"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}