{"id":5719,"date":"2018-12-12T14:14:13","date_gmt":"2018-12-12T16:14:13","guid":{"rendered":"https:\/\/blog.umbler.com\/?p=5719"},"modified":"2021-10-18T12:12:54","modified_gmt":"2021-10-18T15:12:54","slug":"a-nova-versao-do-php-7-3-recem-foi-lancada-e-ja-esta-disponivel-na-umbler","status":"publish","type":"post","link":"https:\/\/blog.umbler.com\/br\/a-nova-versao-do-php-7-3-recem-foi-lancada-e-ja-esta-disponivel-na-umbler\/","title":{"rendered":"A nova vers\u00e3o do PHP 7.3 rec\u00e9m foi lan\u00e7ada e j\u00e1 est\u00e1 dispon\u00edvel na Umbler!"},"content":{"rendered":"\n<p>Um dos lan\u00e7amentos mais aguardados do ano pela comunidade de desenvolvedores PHP do mundo finalmente foi anunciado! Na semana passada a comunidade PHP recebeu a \u00f3tima not\u00edcia de que a vers\u00e3o 7.3 do PHP, queridinho dos devs, teve sua <em>Release General Availability<\/em> antecipada do dia 13 para 6 de dezembro.<\/p>\n\n\n\n<p>O PHP 7.3 j\u00e1 vinha sendo testado desde o lan\u00e7amento da vers\u00e3o Alpha 1, em junho de 2018 e traz corre\u00e7\u00f5es de bugs, novas implementa\u00e7\u00f5es e tamb\u00e9m tornar\u00e1 alguns m\u00e9todos obsoletos. Confira abaixo as principais mudan\u00e7as:<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Atribui\u00e7\u00f5es de refer\u00eancias em list()<\/h2>\n\n\n\n<p>O PHP tem atribui\u00e7\u00e3o de <code>list()<\/code> e atribui\u00e7\u00e3o por refer\u00eancia h\u00e1 muito tempo. No entanto, at\u00e9 agora n\u00e3o era poss\u00edvel usar a atribui\u00e7\u00e3o de refer\u00eancia com <code>list()<\/code>. A vers\u00e3o 7.3 traz uma sintaxe que permite isso.<\/p>\n\n\n\n<p>Um fato interessante \u00e9 que as solicita\u00e7\u00f5es para esta implementa\u00e7\u00e3o s\u00e3o de aproximadamente 18 anos atr\u00e1s, como podemos ver <a href=\"https:\/\/bugs.php.net\/bug.php?id=6768\">neste<\/a> e <a href=\"https:\/\/bugs.php.net\/bug.php?id=7930\">neste<\/a> request.<\/p>\n\n\n\n<p>A nova sintaxe ficou da seguinte forma:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$array = [1, 2];\nlist($a, &amp;$b) = $array;<\/code><\/pre>\n\n\n\n<p>Que \u00e9 equivalente a fazer:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$array = [1, 2];\n$a = $array[0];\n$b =&amp; $array[1]<\/code><\/pre>\n\n\n\n<p>Tamb\u00e9m \u00e9 poss\u00edvel usar essa nova abordagem para listas aninhadas. A especifica\u00e7\u00e3o completa pode ser vista na <a href=\"https:\/\/wiki.php.net\/rfc\/list_reference_assignment\">documenta\u00e7\u00e3o<\/a> oficial do PHP.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Permitir <em>trailing comma<\/em> em chamadas de fun\u00e7\u00e3o e m\u00e9todo<\/h2>\n\n\n\n<p>Permitir uma &#8220;v\u00edrgula \u00e0 direita&#8221; em chamadas de fun\u00e7\u00e3o torna mais conveniente acrescentar argumentos em muitos contextos em que \u00e9 comum chamar uma fun\u00e7\u00e3o com muitos argumentos.<\/p>\n\n\n\n<p>Isso \u00e9 \u00fatil para o VCS (GIT, TFS, SVN, CVS, etc\u2026), pois as linhas individuais na lista podem ser modificadas, adicionadas ou removidas sem precisar tocar em linhas n\u00e3o relacionadas que estejam no final da lista. O que significa que inserir par\u00e2metros adicionais \u00e0s chamadas evitar\u00e1 tocar na linha anterior para adicionar uma nova v\u00edrgula, que seria ruim para o hist\u00f3rico do controle de vers\u00e3o.&nbsp;Alguns exemplos de uso dessa nova sintaxe s\u00e3o:<\/p>\n\n\n\n<p><strong>Inicializando um array<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$foo = [\n'foo',\n'bar',\n];<\/code><\/pre>\n\n\n\n<p><strong>Chamando um m\u00e9todo<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>unset(\n$foo,\n$bar,\n$baz,\n);<\/code><\/pre>\n\n\n\n<p><strong>Passando par\u00e2metros&nbsp;para um template engine<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>echo $twig->render(\n'index.html',\ncompact(\n'title',\n'body',\n'comments',\n)\n);<\/code><\/pre>\n\n\n\n<p>Mais exemplos de uso podem ser encontrados na <a href=\"https:\/\/wiki.php.net\/rfc\/trailing-comma-function-calls\">Wiki<\/a> oficial do PHP.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Op\u00e7\u00e3o para fazer json_encode e json_decode lan\u00e7ar exce\u00e7\u00f5es em erros<\/h2>\n\n\n\n<p>O PHP tem duas fun\u00e7\u00f5es para lidar com JSON: <code>json_decode ()<\/code> e <code>json_encode()<\/code>.<\/p>\n\n\n\n<p>Infelizmente, nenhum t\u00eam um tratamento de erros ideal. O json_decode() retorna NULL d\u00e1 erro, mas NULL tamb\u00e9m \u00e9 um resultado v\u00e1lido se decodificar o JSON \u201cnull\u201d. S\u00f3 \u00e9 poss\u00edvel saber se ocorreu um erro chamando <code>json_last_error()<\/code> ou <code>json_last_error_msg()<\/code>, que retorna o estado de erro global.<\/p>\n\n\n\n<p>Essa situa\u00e7\u00e3o n\u00e3o \u00e9 a ideal e lan\u00e7ar exce\u00e7\u00f5es \u00e9 uma alternativa melhor, pois:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>n\u00e3o haveria confus\u00e3o entre valores de erro e resultados corretos;<\/li><li>nenhum estado global desatualizado;<\/li><li>nenhuma execu\u00e7\u00e3o de programa ap\u00f3s o erro ser lan\u00e7ado a menos que explicitamente tratado e;<\/li><li>mensagens de erro seriam ordenadamente rastre\u00e1veis \u00e0 sua origem.<\/li><\/ul>\n\n\n\n<p>No entanto, alterar imediatamente o comportamento padr\u00e3o dessas fun\u00e7\u00f5es para lan\u00e7ar exce\u00e7\u00e3o seria um problema significativo de compatibilidade com vers\u00f5es anteriores. Por outro lado, produzir um Warning n\u00e3o \u00e9 ideal para erros previs\u00edveis que n\u00e3o sejam bugs ou erro de sintaxe (como decodifica\u00e7\u00e3o JSON quando \u00e9 uma entrada do usu\u00e1rio).<\/p>\n\n\n\n<p>Na vers\u00e3o 7.3 temos a adi\u00e7\u00e3o de uma nova flag (JSON_THROW_ON_ERROR) de op\u00e7\u00e3o para json_decode(). Quando passado essa flag, o comportamento de erro dessas fun\u00e7\u00f5es \u00e9 alterado. O estado de erro global n\u00e3o \u00e9 modificado e uma exception do tipo JsonException \u00e9 lan\u00e7ada.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Fun\u00e7\u00e3o is_countable()<\/h2>\n\n\n\n<p>No PHP 7.2 foi adicionado um Warning ao tentar contar objetos incont\u00e1veis e, a partir disso, todos devs foram for\u00e7ados a procurar e alterar seu c\u00f3digo para evitar esse Warning. Um c\u00f3digo parecido com o seguinte come\u00e7ou a ser utilizado para evitar este Warning:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>if (is_array($foo) || $foo instanceof Countable) {\nreturn count($foo);\n}<\/code><\/pre>\n\n\n\n<p>Foi ent\u00e3o proposta a cria\u00e7\u00e3o de m\u00e9todo que retorne TRUE ou FALSE para indicar se um objeto \u00e9 cont\u00e1vel. A sintaxe ficou da seguinte forma:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>if (is_countable($foo)) {\n\/\/ $foo \u00e9 countable\n}<\/code><\/pre>\n\n\n\n<p>Mais exemplos de uso podem ser encontrados na <a href=\"https:\/\/wiki.php.net\/rfc\/is-countable\">Wiki<\/a> oficial do PHP.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Sintaxe mais flexibilidade para o Heredoc e Nowdoc<\/h2>\n\n\n\n<p>As sintaxes r\u00edgidas do <code>heredoc<\/code> e <code>nowdoc<\/code> faz com que eles sejam evitados pelos desenvolvedores, pois seu uso no c\u00f3digo pode parecer feio e prejudicar a legibilidade. Foram introduzidas duas altera\u00e7\u00f5es \u00e0s atuais sintaxes heredoc e nowdoc para melhorar esta quest\u00e3o:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Para permitir que o marcador de fechamento seja indentado, e;<\/li><li>Para remover o novo requisito de linha ap\u00f3s o marcador de fechamento<\/li><\/ul>\n\n\n\n<p>Por exemplo:<\/p>\n\n\n\n<p>Anteriormente, o c\u00f3digo precisava ser:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;?php\nclass foo {\npublic $bar = &lt;&lt;&lt;EOT\nbar\nEOT;\n}<\/code><\/pre>\n\n\n\n<p>E agora pode ser (detalhe para a indenta\u00e7\u00e3o):<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;?php\nclass foo {\n\u00a0\u00a0\u00a0public $bar = &lt;&lt;&lt;EOT\n\u00a0\u00a0\u00a0bar\n\u00a0\u00a0\u00a0EOT;\n}<\/code><\/pre>\n\n\n\n<p>Mais mudan\u00e7as foram feitas na sintaxe, como a necessidade de quebrar a linha ap\u00f3s o marcador de fechamento. Todas as mudan\u00e7as realizadas neste sentido podem ser conferidas diferentemente na <a href=\"https:\/\/wiki.php.net\/rfc\/flexible_heredoc_nowdoc_syntaxes\">RFC do PHP<\/a>.<\/p>\n\n\n\n<p>Al\u00e9m do que comentamos, a nova vers\u00e3o do PHP traz outras features, corre\u00e7\u00f5es de bugs e tamb\u00e9m a deprecia\u00e7\u00e3o de alguns m\u00e9todos. A lista de m\u00e9todos que foram marcados para serem removidos em futuras vers\u00f5es, voc\u00ea pode <a href=\"http:\/\/php.net\/manual\/en\/migration73.deprecated.php\">encontrar aqui<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Disponibilidade do PHP 7.2 e 7.3 na Umbler<\/h2>\n\n\n\n<p>N\u00e3o era s\u00f3 a comunidade de desenvolvedores PHP que estava aguardando esse lan\u00e7amento desde o seu an\u00fancio. N\u00f3s aqui na Umbler est\u00e1vamos com tudo pronto, s\u00f3 esperando a GA para disponibilizar a nova vers\u00e3o em todos os servi\u00e7os da plataforma.<\/p>\n\n\n\n<p>A partir de hoje os clientes Umbler podem criar ambientes e atualizar a vers\u00e3o de seu PHP para 7.3 diretamente em nosso painel, em segundos!<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img fetchpriority=\"high\" decoding=\"async\" width=\"664\" height=\"429\" src=\"https:\/\/blog.umbler.com\/wp-content\/uploads\/2019\/03\/dropdown-php-1.png\" alt=\"\" class=\"wp-image-5782\" srcset=\"https:\/\/blog.umbler.com\/wp-content\/uploads\/2019\/03\/dropdown-php-1.png 664w, https:\/\/blog.umbler.com\/wp-content\/uploads\/2019\/03\/dropdown-php-1-300x194.png 300w, https:\/\/blog.umbler.com\/wp-content\/uploads\/2019\/03\/dropdown-php-1-150x97.png 150w, https:\/\/blog.umbler.com\/wp-content\/uploads\/2019\/03\/dropdown-php-1-400x258.png 400w, https:\/\/blog.umbler.com\/wp-content\/uploads\/2019\/03\/dropdown-php-1-200x129.png 200w\" sizes=\"(max-width: 664px) 100vw, 664px\" \/><\/figure>\n\n\n\n<p>E a\u00ed, gostou da novidade? J\u00e1 est\u00e1 usando o PHP 7.3 em seus projetos?<br>\nConte pra gente quais as funcionalidades que voc\u00ea mais gostou, deixe seu coment\u00e1rio!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Um dos lan\u00e7amentos mais aguardados do ano pela comunidade de desenvolvedores PHP do mundo finalmente foi anunciado! Na semana passada a comunidade PHP recebeu a \u00f3tima not\u00edcia de que a vers\u00e3o 7.3 do PHP, queridinho dos devs, teve sua Release General Availability antecipada do dia 13 para 6 de dezembro. O PHP 7.3 j\u00e1 vinha [&hellip;]<\/p>\n","protected":false},"author":59,"featured_media":5721,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[23,2],"tags":[30,398,399],"class_list":["post-5719","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-dev","category-updates","tag-php","tag-php-7-3","tag-recursos-php-7-3"],"_links":{"self":[{"href":"https:\/\/blog.umbler.com\/br\/wp-json\/wp\/v2\/posts\/5719"}],"collection":[{"href":"https:\/\/blog.umbler.com\/br\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.umbler.com\/br\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.umbler.com\/br\/wp-json\/wp\/v2\/users\/59"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.umbler.com\/br\/wp-json\/wp\/v2\/comments?post=5719"}],"version-history":[{"count":0,"href":"https:\/\/blog.umbler.com\/br\/wp-json\/wp\/v2\/posts\/5719\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.umbler.com\/br\/wp-json\/wp\/v2\/media\/5721"}],"wp:attachment":[{"href":"https:\/\/blog.umbler.com\/br\/wp-json\/wp\/v2\/media?parent=5719"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.umbler.com\/br\/wp-json\/wp\/v2\/categories?post=5719"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.umbler.com\/br\/wp-json\/wp\/v2\/tags?post=5719"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}