{"id":70234,"date":"2024-11-08T10:39:15","date_gmt":"2024-11-08T13:39:15","guid":{"rendered":"https:\/\/kinsta.com\/pt\/?p=70234&#038;preview=true&#038;preview_id=70234"},"modified":"2024-11-14T07:19:22","modified_gmt":"2024-11-14T10:19:22","slug":"php-8-4","status":"publish","type":"post","link":"https:\/\/kinsta.com\/pt\/blog\/php-8-4\/","title":{"rendered":"PHP 8.4: Veja o Que H\u00e1 de Novo e Aprimorado"},"content":{"rendered":"<p>\u00c9 hora de uma nova vers\u00e3o do <a href=\"https:\/\/kinsta.com\/php\">PHP<\/a>, a linguagem de script do lado do servidor que alimenta nosso CMS favorito, o <a href=\"https:\/\/kinsta.com\/wordpress\">WordPress<\/a>. Antes do lan\u00e7amento da vers\u00e3o 8.4, em 21 de novembro, os desenvolvedores do PHP revelaram v\u00e1rias vers\u00f5es iniciais da nova base de c\u00f3digo, incluindo v\u00e1rios candidatos a lan\u00e7amento desde o congelamento de novos recursos em agosto.<\/p>\n<p>Juntamente com os novos recursos, melhorias e deprecia\u00e7\u00f5es, antecipamos que nesta \u00e9poca do ano, 2024 trouxe ajustes ao ciclo de lan\u00e7amento do PHP, com o fim das atualiza\u00e7\u00f5es de seguran\u00e7a para todas as vers\u00f5es atualmente suportadas sincronizado com o final do ano, em vez de coincidir com a data de lan\u00e7amento GA.<\/p>\n<p>Al\u00e9m disso, esse suporte foi estendido por um ano, o que significa que voc\u00ea poderia estar usando o PHP 8.4 com seguran\u00e7a at\u00e9 2028 (com dois anos de seguran\u00e7a e corre\u00e7\u00f5es de bugs e dois anos apenas de corre\u00e7\u00f5es de seguran\u00e7a).<\/p>\n<p>Embora voc\u00ea possa ter mais tempo para aproveitar o PHP 8.4, provavelmente est\u00e1 curioso para saber o que h\u00e1 de novo nesta vers\u00e3o. Ent\u00e3o, vamos direto ao assunto.<\/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.4<\/h2>\n<p>Os novos recursos inclu\u00eddos no lan\u00e7amento do <a href=\"https:\/\/kinsta.com\/pt\/blog\/php-8-3\/\">PHP 8.3<\/a> no ano passado parecer\u00e3o discretos quando comparados a algumas das adi\u00e7\u00f5es encontradas no 8.4:<\/p>\n<div><\/div><kinsta-auto-toc list-style=\"disc\" selector=\"h3\" count-number=\"6\" sub-toc=\"true\"><\/kinsta-auto-toc>\n<h3>Hooks de propriedade<\/h3>\n<p>Os hooks de propriedade trazem uma abordagem totalmente nova para lidar com &#8220;getters&#8221; e &#8220;setters&#8221; na <a href=\"https:\/\/kinsta.com\/pt\/blog\/php-oop\/\">programa\u00e7\u00e3o orientada a objetos (OOP) do PHP<\/a>, permitindo que voc\u00ea simplifique a estrutura dos seus arquivos de classe.<\/p>\n<p>Como exemplo do que os hooks de propriedade podem substituir, a classe simples abaixo inclui as propriedades <code>$size<\/code> e <code>$flavor<\/code>. Elas t\u00eam visibilidade <code>private<\/code> para proteg\u00ea-las do acesso direto fora do objeto resultante. \u00c9 por isso que os m\u00e9todos p\u00fablicos getter e setter mediam o acesso \u00e0s propriedades:<\/p>\n<pre><code class=\"language-php\">class Coffee\n{\n    private string $size;\n    private string $flavor;\n    public function __construct(string $size, string $flavor) {\n        $this-&gt;size   = $size;\n        $this-&gt;flavor = $flavor;\n    }\n\n    \/\/ \"Setting\" coffee size and flavor\n    public function setSize(string $size): void {\n        $this-&gt;size = $size;\n    }\n    public function setFlavor(string $flavor): void {\n        $this-&gt;flavor = $flavor;\n    }\n\n    \/\/ \"Getting\" coffee size and flavor\n    public function getSize(): string {\n        return $this-&gt;size;\n    }\n    public function getFlavor(): string {\n        return $this-&gt;flavor;\n    }\n} \/\/ End of class\n\n\/\/ Make some coffee\n$coffee = new Coffee('Small', 'Pumpkin Spice');\nprint $coffee-&gt;getSize() . ' ' . $coffee-&gt;getFlavor(); \/\/ Prints \"Small Pumpkin Spice\"\n\n\/\/ Change order\n$coffee-&gt;setSize('Grande');\n$coffee-&gt;setFlavor('Mocha');\nprint $coffee-&gt;getSize() . ' ' . $coffee-&gt;getFlavor(); \/\/ Prints \"Grande Mocha\"<\/code><\/pre>\n<p>Ou, talvez sua classe tenha muitas propriedades e, em vez de escrever muitos m\u00e9todos getter e setter, voc\u00ea use os m\u00e9todos m\u00e1gicos do PHP <code>_get<\/code> e <code>_set<\/code>. Voc\u00ea pode at\u00e9 organizar as coisas com uma estrutura <code>switch<\/code> um tanto bagun\u00e7ada, como no trecho abaixo.<\/p>\n<pre><code class=\"language-php\">\/\/ __set magic method example\npublic function __set(string $key, $value): void \n    switch ($key) {\n        case 'size':\n            $this-&gt;size = $value;\n            break;\n        case 'flavor':\n            $this-&gt;flavor = $value;\n            break;\n        default:\n            throw new InvalidArgumentException('Invalid input');\n        }\n}\n\n\/\/ Later, we can change the coffee order like this:\n$coffee-&gt;size = 'Grande';\n$coffee-&gt;flavor = 'Mocha';<\/code><\/pre>\n<p>Seja qual for a abordagem escolhida, quanto mais propriedades voc\u00ea tiver em sua classe, mais distante o c\u00f3digo usado para manipul\u00e1-las ficar\u00e1 das defini\u00e7\u00f5es localizadas no in\u00edcio do arquivo de classe. Al\u00e9m disso, algumas implementa\u00e7\u00f5es dos m\u00e9todos m\u00e1gicos <code>_get<\/code> e <code>_set<\/code> podem fornecer inesperadamente acesso a propriedades privadas ou protegidas em seu objeto que voc\u00ea n\u00e3o pretendia expor.<\/p>\n<p>O novo recurso de hooks de propriedade agrupa a funcionalidade getter e setter com as pr\u00f3prias propriedades. No exemplo de hooks de propriedade abaixo, voc\u00ea notar\u00e1 que as propriedades <code>$size<\/code> e <code>$flavor<\/code> da classe Coffee agora s\u00e3o p\u00fablicas. Mas tamb\u00e9m adicionamos alguma valida\u00e7\u00e3o b\u00e1sica aos hooks <code>set<\/code>, diferenciando-os das atribui\u00e7\u00f5es diretas.<\/p>\n<pre><code class=\"language-php\">\/\/ Property definitions at the top of our Coffee class\nclass Coffee\n{\n    public string $flavor {\n        set(string $value) {\n            if (strlen($value) &gt; 16) throw new InvalidArgumentException('Input is too long');\n                $this-&gt;flavor = $value;\n        }\n    }\n\n    public string $size {\n        set(string $value) {\n            if (! in_array($value, array(\u2018Small\u2019, \u2018Grande\u2019))) throw new InvalidArgumentException('Not a valid size');\n                $this-&gt;size = $value;\n        }\n    }\n\n    \/\/ Rest of the Coffee class\n}\n\n\/\/ Define a coffee\n$coffee = new Coffee();\n$coffee-&gt;size = 'Grande';\n$coffee-&gt;flavor = 'Pumpkin spice';<\/code><\/pre>\n<p>Da mesma forma, como voc\u00ea pode ver abaixo, um hook <code>get<\/code> pode incluir funcionalidades no que parece ser uma refer\u00eancia comum a uma propriedade de objeto.<\/p>\n<pre><code class=\"language-php\">\/\/ Simplified Coffee class\nclass Coffee\n{\n    public string $flavor {\n        get { \n            return $this-&gt;flavor . ' Spice';\n       }\n    }\n}\n\n\/\/ Create a flavor \n$coffee = new Coffee();\n$coffee-&gt;flavor = 'Pumpkin'; \/\/ Stores the value \"Pumpkin\"\nprint $coffee-&gt;flavor;       \/\/ Prints \"Pumpkin Spice\"<\/code><\/pre>\n<p>Ao contr\u00e1rio dos m\u00e9todos m\u00e1gicos do PHP, os hooks de propriedade podem ser usados em interfaces e classes abstratas. Um exemplo de interface:<\/p>\n<pre><code class=\"language-php\">interface Coffee\n{\n    public string $size { get; set; }\n    public string $flavor { get; set; }\n}<\/code><\/pre>\n<h3>Visibilidade assim\u00e9trica<\/h3>\n<p>Os m\u00e9todos getter e setter publicamente vis\u00edveis que vimos anteriormente representam a abordagem tradicional de acesso a propriedades privadas e protegidas em suas classes.<\/p>\n<p>Um recurso interessante do PHP 8.4 \u00e9 a capacidade de uma propriedade ter diferentes n\u00edveis de visibilidade, dependendo do contexto em que \u00e9 acessada. Portanto, uma propriedade pode ser p\u00fablica quando estiver sendo lida, mas privada ou protegida quando estiver sendo definida.<\/p>\n<p>D\u00ea uma olhada nisso:<\/p>\n<pre><code class=\"language-php\">class Coffee\n{\n    public private(set) string $flavor = 'Pumpkin Spice';\n}\n\n$coffee = new Coffee();\nprint $coffee-&gt;flavor;     \/\/ Prints \"Pumpkin Spice\"\n$coffee-&gt;flavor = 'Mocha';  \/\/ Error (visibility)<\/code><\/pre>\n<p>Acima, a propriedade <code>$flavor<\/code> da classe \u00e9 p\u00fablica, exceto em um contexto de configura\u00e7\u00e3o. Isso j\u00e1 \u00e9 bastante simples, mas a visibilidade assim\u00e9trica tem at\u00e9 mesmo um atalho:<\/p>\n<pre><code class=\"language-php\">class Coffee\n{\n    \/\/ public is assumed when the context is not setting\n    private(set) string $flavor = 'Pumpkin Spice';\n}<\/code><\/pre>\n<p>Voc\u00ea pode usar hooks de propriedade e visibilidade assim\u00e9trica em combina\u00e7\u00e3o para obter uma enorme flexibilidade no trabalho com propriedades de objetos de v\u00e1rias visibilidades.<\/p>\n<h3>Uso de <code>new<\/code> em cadeia sem par\u00eanteses<\/h3>\n<p>Por falar em atalhos, chamar <code>new<\/code> e encadear m\u00e9todos costumava exigir que fosse envolvida por par\u00eanteses, assim:<\/p>\n<pre><code class=\"language-php\">$coffee = (new Coffee())-&gt;getFlavor()-&gt;getSize();<\/code><\/pre>\n<p>O PHP 8.4 permite isso:<\/p>\n<pre><code class=\"language-php\">$coffee = new Coffee()-&gt;getFlavor()-&gt;getSize();<\/code><\/pre>\n<p>Pode parecer uma mudan\u00e7a pequena, mas o fato de voc\u00ea eliminar apenas dois par\u00eanteses facilita muito a leitura e a depura\u00e7\u00e3o.<\/p>\n<h3>Novas fun\u00e7\u00f5es para localizar itens em array<\/h3>\n<p>Do departamento &#8220;Como assim, n\u00e3o pod\u00edamos fazer isso antes?&#8221;, o PHP 8.4 apresenta a fun\u00e7\u00e3o <code>array_find()<\/code>, que pode pesquisar elementos em um array para membros que correspondam \u00e0s condi\u00e7\u00f5es expressas em uma fun\u00e7\u00e3o de callback. A fun\u00e7\u00e3o retorna o valor do primeiro elemento que corresponde ao teste do callback.<\/p>\n<p>A nova vers\u00e3o inclui tr\u00eas outras fun\u00e7\u00f5es relacionadas:<\/p>\n<ul>\n<li><code>array_find_key()<\/code>: Como <code>array_find()<\/code>, mas o valor retornado \u00e9 a chave do elemento correspondente em vez do valor do pr\u00f3prio elemento.<\/li>\n<li><code>array_all()<\/code>: Retorna <code>true<\/code> se <em>todos os<\/em> elementos da array que est\u00e1 sendo testada corresponderem ao teste do callback.<\/li>\n<li><code>array_any()<\/code>: Retorna <code>true<\/code> se <em>pelo menos um<\/em> dos elementos do array corresponder ao teste do callback.<\/li>\n<\/ul>\n<p>Observe que as duas \u00faltimas fun\u00e7\u00f5es retornam indicadores booleanos em vez de chaves ou conte\u00fado do array.<\/p>\n<p>Aqui est\u00e3o alguns exemplos r\u00e1pidos:<\/p>\n<pre><code class=\"language-php\">$array = [\n    'a' =&gt; 'Mocha',\n    'b' =&gt; 'Caramel',\n    'c' =&gt; 'Maple',\n    'd' =&gt; 'Pumpkin'\n   ];\n\n\/\/ Find the first flavor name that is 5 characters long\nvar_dump(array_find($array, function (string $value) {\n    return strlen($value) == 5;\n})); \/\/ Returns \u201cMocha,\u201d even though \u201cMaple\u201d is the same length \n\n\/\/ Find the array key for the first flavor with a name longer than 5 characters.\nvar_dump(array_find_key($array, function (string $value) {\n    return strlen($value) &gt; 5;\n})); \/\/ Returns \u201cb\u201d\n\n\/\/ Check to see if any flavor name is less than 5 characters long\nvar_dump(array_any($array, function (string $value) {\n    return strlen($value) &lt; 5;\n})); \/\/ Returns false\n\n\/\/ Check to see if all flavor names are shorter than 8 characters\nvar_dump(array_all($array, function (string $value) {\n    return strlen($value) &lt; 8;\n})); \/\/ Returns true<\/code><\/pre>\n<h3>An\u00e1lise de HTML5<\/h3>\n<p>O HTM5 \u00e9 o padr\u00e3o de fato para a estrutura das p\u00e1ginas web modernas, mas a tecnologia de an\u00e1lise do DOM (Document Object Model) do PHP parou no HTML 4.01.<\/p>\n<p>Em vez de atualizar a classe <code>DOMDocument<\/code> existente que funciona com os padr\u00f5es HTML mais antigos, o PHP 8.4 vem com uma nova classe <code>DomHTMLDocument<\/code> que est\u00e1 pronta para o HTM5.<\/p>\n<p>Voc\u00ea pode importar o conte\u00fado de uma p\u00e1gina HTML5 desta forma:<\/p>\n<pre><code class=\"language-php\">$document = DomHTMLDocument::createFromString($html)<\/code><\/pre>\n<p>Al\u00e9m do construtor <code>createFromString($html)<\/code> acima, a classe tamb\u00e9m suporta <code>createFromFile($path)<\/code> e <code>createEmpty()<\/code><\/p>\n<p>O novo analisador reconhece tags HTML5 sem\u00e2nticas como <code>main<\/code>, <code>article<\/code> e <code>section<\/code>, que agora s\u00e3o familiares para a maioria de n\u00f3s.<\/p>\n<h3>Fun\u00e7\u00f5es de trim com suporte a multibyte<\/h3>\n<p>Outra adi\u00e7\u00e3o no PHP 8.4 que parece ter demorado a chegar \u00e9 o suporte a multibyte nas fun\u00e7\u00f5es trim:<\/p>\n<ul>\n<li><code>mb_trim()<\/code><\/li>\n<li><code>mb_ltrim()<\/code><\/li>\n<li><code>mb_rtrim()<\/code><\/li>\n<\/ul>\n<p>Como a fun\u00e7\u00e3o de longa data do PHP <code>trim()<\/code>, <code>mb_trim<\/code> remove o espa\u00e7o em branco e alguns caracteres especiais, como avan\u00e7os de linha, de ambas as extremidades de uma string que pode conter caracteres multibyte. As outras fun\u00e7\u00f5es cortam as extremidades esquerda ou direita de uma string.<\/p>\n<h2>Deprecia\u00e7\u00f5es no PHP 8.4<\/h2>\n<p>Cada vers\u00e3o do PHP traz consigo uma lista de recursos e fun\u00e7\u00f5es (alguns bastante obscuros) que s\u00e3o sinalizados para eventual remo\u00e7\u00e3o da plataforma. Uma deprecia\u00e7\u00e3o de maior destaque no PHP 8.4 \u00e9 o rastreamento de sess\u00e3o sem cookies.<\/p>\n<h3>Deprecia\u00e7\u00e3o de sess\u00f5es via GET\/POST<\/h3>\n<p>Embora os <a href=\"https:\/\/kinsta.com\/pt\/blog\/cookies-e-sessoes-php-wordpres\/\">cookies<\/a> sejam, em geral, o m\u00e9todo preferido para rastrear sess\u00f5es de usu\u00e1rios, o PHP suporta a fixa\u00e7\u00e3o de dados de ID de sess\u00e3o em par\u00e2metros GET\/POST. Para ativar o rastreamento de sess\u00e3o por meio de par\u00e2metros em URLs, a configura\u00e7\u00e3o do PHP <code>session.use_only_cookies<\/code> est\u00e1 desativada e a configura\u00e7\u00e3o <code>session.use_trans_sid<\/code> pode ser ativada.<\/p>\n<p>Com o PHP 8.4, qualquer um desses estados para as configura\u00e7\u00f5es acionar\u00e1 um aviso de deprecia\u00e7\u00e3o que pode aparecer nos registros do seu site. Quando o PHP 9 for lan\u00e7ado, essas configura\u00e7\u00f5es n\u00e3o estar\u00e3o mais dispon\u00edveis.<\/p>\n<h3>Outras deprecia\u00e7\u00f5es (e remo\u00e7\u00f5es) no PHP 8.4<\/h3>\n<p>Abaixo voc\u00ea encontra uma lista de funcionalidades que foram descontinuadas pela equipe por tr\u00e1s do PHP 8.4. (Algumas incluem links para mais informa\u00e7\u00f5es sobre esses recursos.)<\/p>\n<ul>\n<li>Formalmente depreciadas as propriedades <code>DOMDocument<\/code> e <code>DOMEntity<\/code>.<\/li>\n<li>Remo\u00e7\u00e3o de <code>DOMImplementation::getFeature($feature, $version)<\/code>.<\/li>\n<li>Deprecia\u00e7\u00e3o da constante <code>DOM_PHP_ERR<\/code>.<\/li>\n<li>Deprecia\u00e7\u00e3o da tag &#8220;S&#8221; em <code><a href=\"http:\/\/www.php.net\/unserialize\" target=\"_blank\" rel=\"noopener noreferrer\">unserialize<\/a>()<\/code>.<\/li>\n<li>Deprecia\u00e7\u00e3o de <code>session.sid_length<\/code> e <code>session.sid_bits_per_character<\/code>.<\/li>\n<li>Deprecia\u00e7\u00e3o de <code>SplFixedArray::__wakeup()<\/code>.<\/li>\n<li>Deprecia\u00e7\u00e3o de <code><a href=\"http:\/\/www.php.net\/xml_set_object\" target=\"_blank\" rel=\"noopener noreferrer\">xml_set_object()<\/a><\/code> e <code>xml_set_*_handler()<\/code> com nomes de m\u00e9todos de string.<\/li>\n<li>Deprecia\u00e7\u00e3o da passagem de\u00a0null e false para <code><a href=\"http:\/\/www.php.net\/dba_key_split\" target=\"_blank\" rel=\"noopener noreferrer\">dba_key_split()<\/a><\/code>.<\/li>\n<li>Deprecia\u00e7\u00e3o da passagem de tipos de dados incorretos para op\u00e7\u00f5es em fun\u00e7\u00f5es da extens\u00e3o ext\/hash.<\/li>\n<li>Deprecia\u00e7\u00e3o das constantes <code>SUNFUNCS_RET_STRING<\/code>, <code>SUNFUNCS_RET_DOUBLE<\/code>, <code>SUNFUNCS_RET_TIMESTAMP<\/code>.<\/li>\n<li>Deprecia\u00e7\u00e3o do mecanismo propriet\u00e1rio de escape de CSV.<\/li>\n<li>Deprecia\u00e7\u00e3o da constante <code>E_STRICT<\/code>.<\/li>\n<li>Deprecia\u00e7\u00e3o de <code><a href=\"http:\/\/www.php.net\/strtok\" target=\"_blank\" rel=\"noopener noreferrer\">strtok()<\/a><\/code>.<\/li>\n<li>Deprecia\u00e7\u00e3o de retornar valores n\u00e3o string de um manipulador de sa\u00edda personalizado.<\/li>\n<li>Deprecia\u00e7\u00e3o de produzir sa\u00edda em um manipulador de sa\u00edda personalizado.<\/li>\n<li>Deprecia\u00e7\u00e3o de <code><a href=\"http:\/\/www.php.net\/file_put_contents\" target=\"_blank\" rel=\"noopener noreferrer\">file_put_contents()<\/a><\/code> com <code>$data<\/code> como uma matriz.<\/li>\n<li>Deprecia\u00e7\u00e3o de <code><a href=\"http:\/\/www.php.net\/mysqli_ping\" target=\"_blank\" rel=\"noopener noreferrer\">mysqli_ping()<\/a><\/code> e <code>mysqli::ping()<\/code><\/li>\n<li>Deprecia\u00e7\u00e3o de <code>mysqli_refresh()<\/code>.<\/li>\n<li>Deprecia\u00e7\u00e3o de <code><a href=\"http:\/\/www.php.net\/mysqli_kill\" target=\"_blank\" rel=\"noopener noreferrer\">mysqli_kill()<\/a><\/code>.<\/li>\n<li>Deprecia\u00e7\u00e3o do segundo par\u00e2metro para <code><a href=\"http:\/\/www.php.net\/mysqli_store_result\" target=\"_blank\" rel=\"noopener noreferrer\">mysqli_store_result()<\/a><\/code>.<\/li>\n<li>Deprecia\u00e7\u00e3o de <code><a href=\"http:\/\/www.php.net\/lcg_value\" target=\"_blank\" rel=\"noopener noreferrer\">lcg_value()<\/a><\/code>.<\/li>\n<li>Deprecia\u00e7\u00e3o de <code><a href=\"http:\/\/www.php.net\/uniqid\" target=\"_blank\" rel=\"noopener noreferrer\">uniqid()<\/a><\/code>.<\/li>\n<li>Deprecia\u00e7\u00e3o de <code><a href=\"http:\/\/www.php.net\/md5\" target=\"_blank\" rel=\"noopener noreferrer\">md5()<\/a><\/code>, <code><a href=\"http:\/\/www.php.net\/sha1\" target=\"_blank\" rel=\"noopener noreferrer\">sha1()<\/a><\/code>, <code><a href=\"http:\/\/www.php.net\/md5_file\" target=\"_blank\" rel=\"noopener noreferrer\">md5_file()<\/a><\/code>, e <code><a href=\"http:\/\/www.php.net\/sha1_file\" target=\"_blank\" rel=\"noopener noreferrer\">sha1_file()<\/a><\/code>.<\/li>\n<li>Deprecia\u00e7\u00e3o de passar<code>E_USER_ERROR<\/code> para <code><a href=\"http:\/\/www.php.net\/trigger_error\" target=\"_blank\" rel=\"noopener noreferrer\">trigger_error()<\/a><\/code>.<\/li>\n<li>Deprecia\u00e7\u00e3o do uso de um \u00fanico sublinhado (\u201c_\u201d) como nome de classe.<\/li>\n<li>Deprecia\u00e7\u00e3o da constante <code>SOAP_FUNCTIONS_ALL<\/code> e pass\u00e1-la para <code>SoapServer::addFunction()<\/code>.<\/li>\n<\/ul>\n<h2>Resumo<\/h2>\n<p>O PHP 8.4 vem com algumas mudan\u00e7as interessantes. Estamos ansiosos para colocar essa vers\u00e3o em nossos servidores em breve para nosso <a href=\"https:\/\/kinsta.com\/pt\/blog\/benchmarks-definitivos-do-php\/\">benchmarking anual do PHP<\/a> &#8211; nossos testes com v\u00e1rios <a href=\"https:\/\/kinsta.com\/pt\/blog\/frameworks-php-populares\/\">sistemas de gerenciamento de conte\u00fado baseados em PHP<\/a>.<\/p>\n<p>Tamb\u00e9m estamos curiosos em ver quando os <a href=\"https:\/\/kinsta.com\/pt\/blog\/tipos-de-desenvolvedores\/\">desenvolvedores<\/a> come\u00e7ar\u00e3o a incorporar alguns dos novos recursos do PHP 8.4 em seus projetos, especialmente os hooks de propriedade.<\/p>\n<p><em>Quais recursos do PHP 8.4 s\u00e3o os seus favoritos? Compartilhe suas opini\u00f5es com nossa comunidade nos coment\u00e1rios!<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u00c9 hora de uma nova vers\u00e3o do PHP, a linguagem de script do lado do servidor que alimenta nosso CMS favorito, o WordPress. Antes do lan\u00e7amento &#8230;<\/p>\n","protected":false},"author":259,"featured_media":70235,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[],"topic":[998,997],"class_list":["post-70234","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","topic-atualizacoes-php","topic-funcoes-php"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v24.6 (Yoast SEO v24.6) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>PHP 8.4: Veja o Que H\u00e1 de Novo e Aprimorado<\/title>\n<meta name=\"description\" content=\"Se \u00e9 fim de ano, \u00e9 hora de uma nova vers\u00e3o do PHP. Aqui est\u00e3o os destaques das novidades da vers\u00e3o 8.4 do PHP para voc\u00ea.\" \/>\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-4\/\" \/>\n<meta property=\"og:locale\" content=\"pt_PT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"PHP 8.4: Veja o Que H\u00e1 de Novo e Aprimorado\" \/>\n<meta property=\"og:description\" content=\"Se \u00e9 fim de ano, \u00e9 hora de uma nova vers\u00e3o do PHP. Aqui est\u00e3o os destaques das novidades da vers\u00e3o 8.4 do PHP para voc\u00ea.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/pt\/blog\/php-8-4\/\" \/>\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=\"2024-11-08T13:39:15+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-11-14T10:19:22+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2024\/11\/what-is-new-in-php-8-4.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1460\" \/>\n\t<meta property=\"og:image:height\" content=\"730\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Steve Bonisteel\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:description\" content=\"Se \u00e9 fim de ano, \u00e9 hora de uma nova vers\u00e3o do PHP. Aqui est\u00e3o os destaques das novidades da vers\u00e3o 8.4 do PHP para voc\u00ea.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2024\/11\/what-is-new-in-php-8-4-1024x512.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=\"11 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-4\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/php-8-4\/\"},\"author\":{\"name\":\"Steve Bonisteel\",\"@id\":\"https:\/\/kinsta.com\/pt\/#\/schema\/person\/d84ceff87bd64a4368a581fc8aa8bd6f\"},\"headline\":\"PHP 8.4: Veja o Que H\u00e1 de Novo e Aprimorado\",\"datePublished\":\"2024-11-08T13:39:15+00:00\",\"dateModified\":\"2024-11-14T10:19:22+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/php-8-4\/\"},\"wordCount\":1514,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/pt\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/php-8-4\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2024\/11\/what-is-new-in-php-8-4.png\",\"inLanguage\":\"pt-PT\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinsta.com\/pt\/blog\/php-8-4\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/php-8-4\/\",\"url\":\"https:\/\/kinsta.com\/pt\/blog\/php-8-4\/\",\"name\":\"PHP 8.4: Veja o Que H\u00e1 de Novo e Aprimorado\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/pt\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/php-8-4\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/php-8-4\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2024\/11\/what-is-new-in-php-8-4.png\",\"datePublished\":\"2024-11-08T13:39:15+00:00\",\"dateModified\":\"2024-11-14T10:19:22+00:00\",\"description\":\"Se \u00e9 fim de ano, \u00e9 hora de uma nova vers\u00e3o do PHP. Aqui est\u00e3o os destaques das novidades da vers\u00e3o 8.4 do PHP para voc\u00ea.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/php-8-4\/#breadcrumb\"},\"inLanguage\":\"pt-PT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/pt\/blog\/php-8-4\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-PT\",\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/php-8-4\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2024\/11\/what-is-new-in-php-8-4.png\",\"contentUrl\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2024\/11\/what-is-new-in-php-8-4.png\",\"width\":1460,\"height\":730},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/php-8-4\/#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.4: Veja o Que H\u00e1 de Novo e Aprimorado\"}]},{\"@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.4: Veja o Que H\u00e1 de Novo e Aprimorado","description":"Se \u00e9 fim de ano, \u00e9 hora de uma nova vers\u00e3o do PHP. Aqui est\u00e3o os destaques das novidades da vers\u00e3o 8.4 do PHP para voc\u00ea.","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-4\/","og_locale":"pt_PT","og_type":"article","og_title":"PHP 8.4: Veja o Que H\u00e1 de Novo e Aprimorado","og_description":"Se \u00e9 fim de ano, \u00e9 hora de uma nova vers\u00e3o do PHP. Aqui est\u00e3o os destaques das novidades da vers\u00e3o 8.4 do PHP para voc\u00ea.","og_url":"https:\/\/kinsta.com\/pt\/blog\/php-8-4\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/kinstapt\/","article_published_time":"2024-11-08T13:39:15+00:00","article_modified_time":"2024-11-14T10:19:22+00:00","og_image":[{"width":1460,"height":730,"url":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2024\/11\/what-is-new-in-php-8-4.png","type":"image\/png"}],"author":"Steve Bonisteel","twitter_card":"summary_large_image","twitter_description":"Se \u00e9 fim de ano, \u00e9 hora de uma nova vers\u00e3o do PHP. Aqui est\u00e3o os destaques das novidades da vers\u00e3o 8.4 do PHP para voc\u00ea.","twitter_image":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2024\/11\/what-is-new-in-php-8-4-1024x512.png","twitter_creator":"@kinsta_pt","twitter_site":"@kinsta_pt","twitter_misc":{"Escrito por":"Steve Bonisteel","Tempo estimado de leitura":"11 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/pt\/blog\/php-8-4\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/pt\/blog\/php-8-4\/"},"author":{"name":"Steve Bonisteel","@id":"https:\/\/kinsta.com\/pt\/#\/schema\/person\/d84ceff87bd64a4368a581fc8aa8bd6f"},"headline":"PHP 8.4: Veja o Que H\u00e1 de Novo e Aprimorado","datePublished":"2024-11-08T13:39:15+00:00","dateModified":"2024-11-14T10:19:22+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/pt\/blog\/php-8-4\/"},"wordCount":1514,"commentCount":0,"publisher":{"@id":"https:\/\/kinsta.com\/pt\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/pt\/blog\/php-8-4\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2024\/11\/what-is-new-in-php-8-4.png","inLanguage":"pt-PT","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinsta.com\/pt\/blog\/php-8-4\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/pt\/blog\/php-8-4\/","url":"https:\/\/kinsta.com\/pt\/blog\/php-8-4\/","name":"PHP 8.4: Veja o Que H\u00e1 de Novo e Aprimorado","isPartOf":{"@id":"https:\/\/kinsta.com\/pt\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/pt\/blog\/php-8-4\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/pt\/blog\/php-8-4\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2024\/11\/what-is-new-in-php-8-4.png","datePublished":"2024-11-08T13:39:15+00:00","dateModified":"2024-11-14T10:19:22+00:00","description":"Se \u00e9 fim de ano, \u00e9 hora de uma nova vers\u00e3o do PHP. Aqui est\u00e3o os destaques das novidades da vers\u00e3o 8.4 do PHP para voc\u00ea.","breadcrumb":{"@id":"https:\/\/kinsta.com\/pt\/blog\/php-8-4\/#breadcrumb"},"inLanguage":"pt-PT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/pt\/blog\/php-8-4\/"]}]},{"@type":"ImageObject","inLanguage":"pt-PT","@id":"https:\/\/kinsta.com\/pt\/blog\/php-8-4\/#primaryimage","url":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2024\/11\/what-is-new-in-php-8-4.png","contentUrl":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2024\/11\/what-is-new-in-php-8-4.png","width":1460,"height":730},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/pt\/blog\/php-8-4\/#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.4: Veja o Que H\u00e1 de Novo e Aprimorado"}]},{"@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\/70234","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=70234"}],"version-history":[{"count":8,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/posts\/70234\/revisions"}],"predecessor-version":[{"id":70292,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/posts\/70234\/revisions\/70292"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/70234\/translations\/en"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/70234\/translations\/it"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/70234\/translations\/pt"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/70234\/translations\/fr"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/70234\/translations\/de"},{"embeddable":true,"hreflang":"ja","title":"Japanese","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/70234\/translations\/jp"},{"embeddable":true,"hreflang":"nl","title":"Dutch","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/70234\/translations\/nl"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/70234\/translations\/es"},{"href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/70234\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/media\/70235"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/media?parent=70234"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/tags?post=70234"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/topic?post=70234"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}