{"id":23254,"date":"2025-09-08T20:15:08","date_gmt":"2025-09-08T23:15:08","guid":{"rendered":"https:\/\/blog.locaweb.com.br\/?p=23254"},"modified":"2025-09-08T20:15:10","modified_gmt":"2025-09-08T23:15:10","slug":"linguagem-php","status":"publish","type":"post","link":"https:\/\/www.locaweb.com.br\/blog\/temas\/codigo-aberto\/linguagem-php\/","title":{"rendered":"8 dicas de linguagem PHP para praticar"},"content":{"rendered":"\n<p class=\"has-text-align-center\"><em>Descubra 8 dicas essenciais para aprimorar seu c\u00f3digo PHP, explorando novos recursos e boas pr\u00e1ticas para desenvolvimento web.<\/em><\/p>\n\n\n\n<p>A linguagem PHP, criada h\u00e1 mais de tr\u00eas d\u00e9cadas, continua evoluindo de forma surpreendente e permanece como uma das mais utilizadas no desenvolvimento web. Apesar de veterano, o PHP n\u00e3o parou no tempo e vem recebendo inova\u00e7\u00f5es constantes \u2013 desde novos recursos de tipagem at\u00e9 constru\u00e7\u00f5es de sintaxe mais enxutas e eficientes.&nbsp;&nbsp;<\/p>\n\n\n\n<p>Para acompanhar essa evolu\u00e7\u00e3o, reunimos aqui <strong>8 dicas de linguagem PHP<\/strong> que podem fazer toda a diferen\u00e7a no seu trabalho.&nbsp;<\/p>\n\n\n\n<p>Embora muitas dessas funcionalidades j\u00e1 estejam dispon\u00edveis em vers\u00f5es recentes do PHP (como 7.4, 8.0 e superiores), a ado\u00e7\u00e3o e o dom\u00ednio pr\u00e1tico de cada recurso tendem a se expandir conforme a comunidade evolui.&nbsp;&nbsp;<\/p>\n\n\n\n<p>Se voc\u00ea atua com frameworks populares como <a href=\"https:\/\/www.locaweb.com.br\/blog\/temas\/codigo-aberto\/laravel-framework-php\/\" target=\"_blank\" rel=\"noreferrer noopener\">Laravel<\/a> ou deseja se aprofundar na <a href=\"https:\/\/www.locaweb.com.br\/blog\/temas\/codigo-aberto\/evolucao-php\/\" target=\"_blank\" rel=\"noreferrer noopener\">evolu\u00e7\u00e3o do PHP<\/a>, essas dicas ser\u00e3o especialmente \u00fateis para tornar seu c\u00f3digo mais moderno, leg\u00edvel e escal\u00e1vel. Algumas delas tamb\u00e9m se alinham \u00e0s melhores pr\u00e1ticas de <a href=\"https:\/\/www.locaweb.com.br\/blog\/temas\/codigo-aberto\/linguagens-para-devs-por-que-usar-php\/\" target=\"_blank\" rel=\"noreferrer noopener\">por que usar PHP<\/a> atualmente.&nbsp;<\/p>\n\n\n\n<p>Al\u00e9m do aspecto sint\u00e1tico, o entendimento das novas constru\u00e7\u00f5es facilita a ado\u00e7\u00e3o de ferramentas de an\u00e1lise est\u00e1tica (como PHPStan) e o uso de IDEs com suporte avan\u00e7ado a features recentes.&nbsp;&nbsp;<\/p>\n\n\n\n<p>Mas, antes de falarmos sobre infraestrutura, vamos mergulhar nessas dicas e entender como cada uma delas pode melhorar o seu desenvolvimento neste ano e nos pr\u00f3ximos.&nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>8 dicas de linguagem PHP para colocar em pr\u00e1tica <\/strong>&nbsp;<\/h2>\n\n\n\n<p>Para facilitar, organizamos essas 8 dicas de modo que voc\u00ea consiga identificar como aplic\u00e1-las diretamente no seu dia a dia de desenvolvimento. Ent\u00e3o, prepare seu editor de c\u00f3digo, seu <a href=\"https:\/\/www.locaweb.com.br\/blog\/temas\/codigo-aberto\/como-instalar-o-php-no-ubuntu\/\" target=\"_blank\" rel=\"noreferrer noopener\">PHP instalado no Ubuntu<\/a> (ou em qualquer outro SO) e vamos l\u00e1!&nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>1. Express\u00f5es \u201cmatch\u201d \u2013 match expressions<\/strong>&nbsp;<\/h2>\n\n\n\n<p>Com a chegada do PHP 8.0 em 2020, um dos recursos que chamou aten\u00e7\u00e3o foi o <strong>match expression<\/strong>. Ele \u00e9 uma forma mais concisa e poderosa de lidar com m\u00faltiplas verifica\u00e7\u00f5es de valor, substituindo (em muitos casos) o antigo <em>switch-case<\/em>. Um exemplo simples:&nbsp;<\/p>\n\n\n\n<p>\/\/ Exemplo de match expression\u00a0<br>$resultado = match($status) {\u00a0<br>\u00a0\u00a0\u00a0 &#8216;iniciado&#8217;\u00a0 => &#8216;O processo j\u00e1 foi iniciado.&#8217;,\u00a0<br>\u00a0\u00a0\u00a0 &#8216;pendente&#8217;\u00a0 => &#8216;Ainda faltam etapas para finalizar.&#8217;,\u00a0<br>\u00a0\u00a0\u00a0 &#8216;concluido&#8217; => &#8216;Tudo pronto!&#8217;,\u00a0<br>\u00a0\u00a0\u00a0 default\u00a0\u00a0\u00a0\u00a0 => &#8216;Status desconhecido.&#8217;\u00a0<br>};\u00a0<br><br>Repare como a sintaxe \u00e9 mais limpa e n\u00e3o requer <em>break<\/em> ao final de cada caso. Se voc\u00ea quiser explorar trechos de c\u00f3digo rapidamente, pode experimentar o <a href=\"https:\/\/sandbox.onlinephpfunctions.com\/\" target=\"_blank\" rel=\"noreferrer noopener\">PHP Sandbox<\/a>.\u00a0<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Como funciona o `match` em PHP<\/strong>&nbsp;<\/h3>\n\n\n\n<p>O <strong>match<\/strong> \u00e9 uma express\u00e3o, diferente do <em>switch<\/em>, que \u00e9 uma constru\u00e7\u00e3o de controle de fluxo. No match, cada caso tem implicitamente o retorno de uma express\u00e3o, n\u00e3o podendo existir repeti\u00e7\u00f5es de valores iguais sem uma \u201cjun\u00e7\u00e3o\u201d expl\u00edcita. Isso torna seu comportamento mais previs\u00edvel e seu c\u00f3digo mais simples de ler.&nbsp;<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Diferen\u00e7as entre `match` e `switch`<\/strong>&nbsp;<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Sintaxe mais enxuta:<\/strong> voc\u00ea n\u00e3o precisa escrever break;\u00a0<\/li>\n\n\n\n<li><strong>Sem \u201cfall-through\u201d:<\/strong> ou seja, n\u00e3o h\u00e1 o risco de cair de um case para outro, o que reduz bugs;\u00a0<\/li>\n\n\n\n<li><strong>Express\u00e3o de retorno:<\/strong> match retorna um valor, enquanto switch \u00e9 um fluxo de controle.\u00a0<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Exemplos pr\u00e1ticos e ferramentas \u00fateis<\/strong>&nbsp;<\/h3>\n\n\n\n<p>Al\u00e9m do <a href=\"https:\/\/sandbox.onlinephpfunctions.com\/\" target=\"_blank\" rel=\"noreferrer noopener\">PHP Sandbox<\/a> para testes r\u00e1pidos, vale a pena inserir match expressions em casos nos quais o seu c\u00f3digo realizava um switch muito longo. Assim, voc\u00ea ganha clareza e elimina potenciais armadilhas de break. Em frameworks como Laravel, match pode simplificar m\u00e9todos que lidam com diferentes estados de objetos ou enumeradores internos.&nbsp;<\/p>\n\n\n\n<p><strong>Leia mais:&nbsp;<\/strong>&nbsp;<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/www.locaweb.com.br\/blog\/temas\/codigo-aberto\/tudo-sobre-linguagem-de-programacao-php\/\" target=\"_blank\" rel=\"noreferrer noopener\">O que eu preciso saber sobre a linguagem de programa\u00e7\u00e3o PHP?<\/a>\u00a0<\/li>\n\n\n\n<li><a href=\"https:\/\/www.locaweb.com.br\/blog\/temas\/codigo-aberto\/linguagem-de-programacao-5-tendencias-para-2025\/\" target=\"_blank\" rel=\"noreferrer noopener\">Linguagem de programa\u00e7\u00e3o: 5 tend\u00eancias para 2025 e al\u00e9m<\/a>\u00a0<\/li>\n\n\n\n<li><a href=\"https:\/\/www.locaweb.com.br\/blog\/temas\/codigo-aberto\/como-instalar-o-php-no-ubuntu\/\" target=\"_blank\" rel=\"noreferrer noopener\">Como instalar o PHP no Ubuntu?<\/a>\u00a0<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>2. Construtores de classe tunados<\/strong>&nbsp;<\/h2>\n\n\n\n<p>Outro ponto importante na <strong>linguagem PHP<\/strong> s\u00e3o as melhorias em construtores que surgiram a partir das vers\u00f5es 8.x. Agora \u00e9 poss\u00edvel definir propriedades da classe de forma mais sucinta dentro do construtor, reduzindo o \u201cboilerplate\u201d e tornando o c\u00f3digo mais elegante.&nbsp;<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Melhorias nos construtores a partir do PHP 8.0<\/strong>&nbsp;<\/h3>\n\n\n\n<p>Antes, voc\u00ea precisava declarar as propriedades da classe, em seguida criar o construtor, repetir o nome das propriedades e dos par\u00e2metros, entre outras repeti\u00e7\u00f5es. Com as melhorias, a sintaxe ficou bem mais compacta, algo como:&nbsp;<\/p>\n\n\n\n<p>class Usuario {\u00a0<br>\u00a0\u00a0\u00a0 public function __construct(\u00a0<br>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 public string $nome,\u00a0<br>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 private int $idade,\u00a0<br>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 protected bool $ativo = true\u00a0<br>\u00a0\u00a0\u00a0 ) {}\u00a0<br>}\u00a0<\/p>\n\n\n\n<p>Essa forma de <strong>\u201cpromoted properties\u201d<\/strong> evita redund\u00e2ncias e ainda deixa claro o n\u00edvel de visibilidade de cada propriedade (public, private ou protected).&nbsp;<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Como simplificar c\u00f3digo com a nova sintaxe<\/strong>&nbsp;<\/h3>\n\n\n\n<p>Na pr\u00e1tica, voc\u00ea n\u00e3o precisa mais criar m\u00e9todos <em>getters<\/em> e <em>setters<\/em> b\u00e1sicos, pois o PHP j\u00e1 faz o mapeamento das vari\u00e1veis do construtor para as propriedades da classe. \u00c9 claro que, para um sistema complexo, ainda conv\u00e9m encapsular certas l\u00f3gicas. Mas, para casos simples, essa sintaxe reduz dramaticamente o tamanho da classe.&nbsp;<\/p>\n\n\n\n<p>Para <strong>analisar a qualidade do seu c\u00f3digo<\/strong> e identificar oportunidades de refatora\u00e7\u00e3o, ferramentas como <em>PHPStan<\/em> entram em cena, indicando trechos obsoletos ou redundantes. Em ambientes de <a href=\"https:\/\/www.locaweb.com.br\/blog\/temas\/codigo-aberto\/ci-cd-vantagens\/\" target=\"_blank\" rel=\"noreferrer noopener\">CI\/CD<\/a>, \u00e9 poss\u00edvel configurar o PHPStan para garantir que todas as classes respeitem a nova sintaxe de construtores quando apropriado.&nbsp;<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe title=\"PHP 8.3: como aproveitar as novas funcionalidades? | Locaweb\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/e7kYVk7rBno?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>3. Uni\u00e3o, intersec\u00e7\u00e3o e tudo sobre tipos<\/strong>&nbsp;<\/h2>\n\n\n\n<p>Uma das principais queixas em vers\u00f5es antigas do PHP era a falta de tipagem robusta. Por\u00e9m, isso mudou com a introdu\u00e7\u00e3o de <strong>tipos de uni\u00e3o<\/strong> (union types) e <strong>tipos de intersec\u00e7\u00e3o<\/strong> (intersection types). Esses recursos elevam o PHP a um novo n\u00edvel de seguran\u00e7a e legibilidade, permitindo definir com maior precis\u00e3o os tipos de par\u00e2metros e retornos de fun\u00e7\u00e3o.&nbsp;<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>O que s\u00e3o tipos de uni\u00e3o (`union types`)<\/strong>&nbsp;<\/h3>\n\n\n\n<p>Os <strong>union types<\/strong> surgem quando voc\u00ea deseja indicar que determinada vari\u00e1vel ou par\u00e2metro pode ser de mais de um tipo. Por exemplo, `public function processar(int|float $valor)`. Isso significa que a fun\u00e7\u00e3o aceita tanto <em>int<\/em> quanto <em>float<\/em>, e o interpretador consegue fazer a verifica\u00e7\u00e3o apropriada.&nbsp;<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Como usar tipos de intersec\u00e7\u00e3o (`intersection types`)<\/strong>&nbsp;<\/h3>\n\n\n\n<p>J\u00e1 os <strong>intersection types<\/strong> se referem a cen\u00e1rios em que um objeto deve implementar mais de uma interface, por exemplo. Se voc\u00ea tem `interface A` e `interface B`, e precisa de um objeto que seja `A&amp;B`, pode declarar algo como `public function testar(A&amp;B $obj)`. Isso for\u00e7a o objeto passado a cumprir ambas as interfaces.&nbsp;<\/p>\n\n\n\n<p>Essas inova\u00e7\u00f5es s\u00e3o especialmente importantes em projetos grandes, pois <strong>diminuem ambiguidades<\/strong> e permitem ao PHP (e \u00e0s IDEs) oferecer feedback mais preciso durante a compila\u00e7\u00e3o ou edi\u00e7\u00e3o. O <em>PHPStorm<\/em>, por exemplo, tem suporte robusto a union e intersection types, fornecendo autocompletes e alertas quando o c\u00f3digo viola as defini\u00e7\u00f5es de tipo.&nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>4. A express\u00e3o throw<\/strong>&nbsp;<\/h2>\n\n\n\n<p>At\u00e9 pouco tempo, o <strong>throw<\/strong> era visto como uma instru\u00e7\u00e3o (statement), mas as vers\u00f5es recentes do PHP o elevam a <strong>status de express\u00e3o<\/strong>. Na pr\u00e1tica, isso torna o uso de exce\u00e7\u00f5es mais flex\u00edvel, podendo, por exemplo, aparecer dentro de operadores tern\u00e1rios ou arrow functions.&nbsp;<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>Como `throw` pode ser usado como express\u00e3o<\/strong>&nbsp;<\/h4>\n\n\n\n<p>Imagine uma valida\u00e7\u00e3o como esta:&nbsp;<\/p>\n\n\n\n<p>$valor = $dados[&#8216;chave&#8217;] ?? throw new InvalidArgumentException(&#8220;Chave n\u00e3o encontrada&#8221;);\u00a0<br><br>Repare que utilizamos throw new InvalidArgumentException() no meio de uma express\u00e3o que atribui valor \u00e0 vari\u00e1vel. Se a chave n\u00e3o existir em <em>$dados<\/em>, a exce\u00e7\u00e3o \u00e9 lan\u00e7ada imediatamente. Esse recurso elimina a necessidade de estruturas if intricadas, deixando o c\u00f3digo <strong>mais conciso<\/strong>.\u00a0<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Vantagens no tratamento de exce\u00e7\u00f5es<\/strong>&nbsp;<\/h3>\n\n\n\n<p>Usar o <strong>throw<\/strong> como express\u00e3o traz maior fluidez ao c\u00f3digo. Combina-se bem com <strong>operadores de coalesc\u00eancia nula<\/strong>, facilitando a notifica\u00e7\u00e3o de exce\u00e7\u00f5es, caso algo falhe em tempo de execu\u00e7\u00e3o. O resultado \u00e9 um estilo de programa\u00e7\u00e3o mais declarativo, em que cada linha deixa claro o que deve acontecer se as condi\u00e7\u00f5es n\u00e3o forem atendidas.&nbsp;<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Debugging avan\u00e7ado com ferramentas como Xdebug<\/strong>&nbsp;<\/h3>\n\n\n\n<p>Para inspecionar o fluxo de exce\u00e7\u00f5es, vale a pena utilizar <strong>Xdebug<\/strong>, que \u00e9 um depurador para PHP. Ele permite analisar o call stack, identificar pontos de lan\u00e7amento de exce\u00e7\u00f5es e rastrear vari\u00e1veis em tempo real, auxiliando no ajuste fino das express\u00f5es de <em>throw<\/em>.&nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>5. Arrow functions<\/strong>&nbsp;<\/h2>\n\n\n\n<p>As <strong>arrow functions<\/strong> (ou fun\u00e7\u00f5es seta) chegaram ao PHP inspiradas em linguagens como <a href=\"https:\/\/www.locaweb.com.br\/blog\/temas\/codigo-aberto\/o-que-e-javascript\/\" target=\"_blank\" rel=\"noreferrer noopener\">JavaScript<\/a>. S\u00e3o \u00fateis para escrever fun\u00e7\u00f5es an\u00f4nimas muito curtas, sem a necessidade de toda a sintaxe de closures. A apar\u00eancia \u00e9 `fn($x) =&gt; $x * 2;`.&nbsp;<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Como funcionam as arrow functions (`fn() =&gt; &#8230;`)<\/strong>&nbsp;<\/h3>\n\n\n\n<p>Arrow functions mant\u00eam acesso ao escopo de vari\u00e1veis externas por <em>valor<\/em>, diferentemente das closures tradicionais, que se baseiam em <em>use<\/em>. Eis um exemplo:&nbsp;<\/p>\n\n\n\n<p>$multiplicar = fn($a, $b) => $a * $b;\u00a0<br>echo $multiplicar(3, 4); \/\/ 12\u00a0<\/p>\n\n\n\n<p>Para fun\u00e7\u00f5es simples e curtas, as arrow functions tornam o c\u00f3digo mais <strong>limpo<\/strong>. Por\u00e9m, se a l\u00f3gica for mais complexa, ainda conv\u00e9m usar closures com corpo extenso, para que o leitor do c\u00f3digo identifique as partes da l\u00f3gica com clareza.&nbsp;<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Diferen\u00e7a entre arrow functions e closures tradicionais<\/strong>&nbsp;<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Arrow<\/strong> \u2192 Sintaxe mais curta, sem <em>use<\/em>, e sempre por valor.\u00a0<\/li>\n\n\n\n<li><strong>Closure<\/strong> \u2192 Permite corpo de fun\u00e7\u00e3o grande, <em>use<\/em> de vari\u00e1veis etc.\u00a0<\/li>\n<\/ul>\n\n\n\n<p>No geral, <a href=\"https:\/\/www.locaweb.com.br\/blog\/temas\/codigo-aberto\/arrays-em-javascript\/\" target=\"_blank\" rel=\"noreferrer noopener\"><strong>arrow functions<\/strong><\/a> s\u00e3o ideais para retornos diretos ou simples c\u00e1lculos inline. Para algo maior, closures tradicionais ainda s\u00e3o mais adequadas.&nbsp;<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Casos de uso e ferramentas para otimizar c\u00f3digo<\/strong>&nbsp;<\/h3>\n\n\n\n<p>Em frameworks como Laravel, arrow functions podem simplificar callbacks de cole\u00e7\u00f5es, tornando a leitura imediata. Se voc\u00ea deseja otimizar ainda mais seu fluxo, pode combinar esse recurso com outras facilidades do Laravel (como Collections) e, assim, reduzir a verbosidade das fun\u00e7\u00f5es an\u00f4nimas.&nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>6. N\u00fameros grandes com o separador `_`<\/strong>&nbsp;<\/h2>\n\n\n\n<p>Para facilitar a leitura de <strong>n\u00fameros grandes<\/strong>, o PHP 7.4 introduziu o separador de d\u00edgitos `_`. Assim, voc\u00ea pode escrever `1_000_000` em vez de `1000000`. Embora seja um detalhe aparentemente simples, traz um grande benef\u00edcio em aplica\u00e7\u00f5es que lidam com montantes financeiros ou constantes num\u00e9ricas extensas.&nbsp;<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Como usar o separador de milhares em n\u00fameros<\/strong>&nbsp;<\/h3>\n\n\n\n<p>A sintaxe \u00e9 direta:&nbsp;<\/p>\n\n\n\n<p>$valor = 2_500_000;&nbsp;<\/p>\n\n\n\n<p>No runtime, esse valor \u00e9 interpretado como `2500000`, sem mudan\u00e7as de tipo ou implica\u00e7\u00f5es de performance. Contudo, <strong>a legibilidade melhora<\/strong> para quem programa.&nbsp;<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Benef\u00edcios para legibilidade do c\u00f3digo<\/strong>&nbsp;<\/h3>\n\n\n\n<p>Quem j\u00e1 debugou aplica\u00e7\u00f5es que lidam com cifras ou quantias em bytes sabe o quanto \u00e9 f\u00e1cil se perder no meio de tantos zeros. O `_` corrige esse problema, trazendo um padr\u00e3o de escrita similar ao que se encontra em outras linguagens (como Java e C#).&nbsp;<\/p>\n\n\n\n<p>Em <strong>aplica\u00e7\u00f5es financeiras<\/strong>, esse separador pode fazer diferen\u00e7a na manuten\u00e7\u00e3o e revis\u00e3o do c\u00f3digo, pois eventuais erros de digita\u00e7\u00e3o ficam mais evidentes.&nbsp;<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Exemplos e boas pr\u00e1ticas<\/strong>&nbsp;<\/h3>\n\n\n\n<p>Use `_` com coer\u00eancia. Evite mistur\u00e1-lo em lugares que n\u00e3o fa\u00e7am sentido ou colocar underscores em formato inconsistente. O ideal \u00e9 agrupar por milhar, como `1_234_567` em vez de `123_4567`. Nesse caso, ferramentas de formata\u00e7\u00e3o (linters) podem auxiliar na padroniza\u00e7\u00e3o.\u00a0<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe title=\"Como o PHP Funciona na Web | Locaweb PHP Community Summit\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/B4sjBH7rD-k?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>7. Operador nullsafe `?-&gt;`<\/strong>&nbsp;<\/h2>\n\n\n\n<p>O operador <strong>`?-&gt;`<\/strong> (nullsafe) foi outra adi\u00e7\u00e3o muito aplaudida por quem usa PHP. Ele impede erros de \u201cchamada de m\u00e9todo em vari\u00e1vel null\u201d, que antes for\u00e7avam checagens repetitivas.&nbsp;<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Como evitar erros com `?-&gt;`<\/strong>&nbsp;<\/h3>\n\n\n\n<p>Ao usar `?-&gt;`, se a vari\u00e1vel antes do operador for null, ent\u00e3o, a cadeia de chamada retorna null em vez de gerar um erro. Veja um exemplo:&nbsp;<\/p>\n\n\n\n<p>$endereco = $usuario?-&gt;getPerfil()?-&gt;getEndereco()?-&gt;getBairro();&nbsp;<\/p>\n\n\n\n<p>Assim, se `getPerfil()` ou `getEndereco()` retornar null, toda a express\u00e3o se torna null sem lan\u00e7ar exce\u00e7\u00e3o, evitando a <em>PHP Fatal Error<\/em>.&nbsp;<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Diferen\u00e7a entre `nullsafe` e operadores tradicionais<\/strong>&nbsp;<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Chamada segura:<\/strong> antes, era comum fazermos if ($obj !== null) para cada m\u00e9todo. Agora, est\u00e1 simplificado.\u00a0<\/li>\n\n\n\n<li><strong>Menos repeti\u00e7\u00e3o:<\/strong> o uso do nullsafe remove a necessidade de repetidas verifica\u00e7\u00f5es de exist\u00eancia de objeto.\u00a0<\/li>\n<\/ul>\n\n\n\n<p>O uso indiscriminado de `?-&gt;` pode, no entanto, mascarar problemas de l\u00f3gica. Ent\u00e3o, \u00e9 importante compreender em que cen\u00e1rios faz sentido retornar null silenciosamente e em quais voc\u00ea realmente precisa de um erro expl\u00edcito.&nbsp;<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Testes e valida\u00e7\u00f5es usando PHPUnit<\/strong>&nbsp;<\/h3>\n\n\n\n<p>Para garantir que a utiliza\u00e7\u00e3o de <strong>nullsafe<\/strong> esteja correta, teste cen\u00e1rios nos quais os objetos podem ou n\u00e3o existir. O <em>PHPUnit<\/em> \u00e9 uma ferramenta essencial para isso, permitindo simular diferentes estados de objetos e avaliar se o retorno \u00e9 condizente. Se certo m\u00e9todo que n\u00e3o deveria nunca ser nulo retorna null silenciosamente, \u00e9 um alerta de design.&nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>8. Objetos como valor padr\u00e3o de fun\u00e7\u00f5es e propriedades<\/strong>&nbsp;<\/h2>\n\n\n\n<p>Por fim, uma pr\u00e1tica moderna (que gradualmente ganhou suporte no PHP) \u00e9 o uso de <strong>objetos como valores padr\u00e3o<\/strong>, tanto em par\u00e2metros de fun\u00e7\u00f5es quanto em propriedades de classe. Embora haja restri\u00e7\u00f5es, as vers\u00f5es recentes do PHP passaram a permitir certos usos dessa funcionalidade, simplificando a inicializa\u00e7\u00e3o de estruturas de dados.&nbsp;<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Como definir valores padr\u00e3o usando objetos<\/strong>&nbsp;<\/h3>\n\n\n\n<p>O mecanismo t\u00edpico \u00e9 apontar para `const`antes ou express\u00f5es est\u00e1ticas. Por exemplo:&nbsp;<\/p>\n\n\n\n<p>class Exemplo {\u00a0<br>\u00a0\u00a0\u00a0 private DateTime $data;\u00a0<br>\u00a0\u00a0\u00a0 public function __construct(DateTime $dt = new DateTime(&#8220;now&#8221;)) {\u00a0<br>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 $this->data = $dt;\u00a0<br>\u00a0\u00a0\u00a0 }\u00a0<br>}\u00a0<\/p>\n\n\n\n<p>Assim, se o usu\u00e1rio n\u00e3o passar um objeto <em>DateTime<\/em>, o construtor cria um por padr\u00e3o. Essa capacidade reduz <strong>boilerplate<\/strong> e torna a API de uso mais simples.&nbsp;<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Exemplos pr\u00e1ticos e aplica\u00e7\u00f5es reais<\/strong>&nbsp;<\/h3>\n\n\n\n<p>Imagine um componente que sempre precisa de uma inst\u00e2ncia de <em>logger<\/em>. Podemos fornecer um logger b\u00e1sico por padr\u00e3o, mas tamb\u00e9m permitir que o usu\u00e1rio injete um logger customizado quando desejar algo mais avan\u00e7ado.&nbsp;<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>Ferramentas para gerenciar objetos PHP<\/strong>&nbsp;<\/h4>\n\n\n\n<p>Em ecossistemas como <a href=\"https:\/\/symfony.com\/\" target=\"_blank\" rel=\"noreferrer noopener\"><strong>Symfony<\/strong><\/a> ou <a href=\"https:\/\/www.doctrine-project.org\/\" target=\"_blank\" rel=\"noreferrer noopener\"><strong>Doctrine ORM<\/strong><\/a>, controlar a cria\u00e7\u00e3o de objetos \u00e9 essencial para a inje\u00e7\u00e3o de depend\u00eancias ou mapeamento de entidades. Com valores padr\u00e3o, simplificamos configura\u00e7\u00f5es e deixamos claro que, na aus\u00eancia de inje\u00e7\u00e3o manual, a classe usar\u00e1 um objeto gen\u00e9rico.&nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Conclus\u00e3o<\/strong>&nbsp;<\/h2>\n\n\n\n<p>A <a href=\"https:\/\/www.locaweb.com.br\/blog\/temas\/codigo-aberto\/php\/\" target=\"_blank\" rel=\"noreferrer noopener\">linguagem PHP<\/a>, frequentemente mencionada em blogs especializados, como o da Locaweb, segue firme no cen\u00e1rio do desenvolvimento web, adaptando-se \u00e0s exig\u00eancias de desempenho e seguran\u00e7a dos novos tempos.&nbsp;&nbsp;<\/p>\n\n\n\n<p>As<strong> <\/strong>dicas apresentadas ao longo deste artigo demonstram como a ado\u00e7\u00e3o de recursos como match expressions, union\/intersection types, arrow functions, nullsafe operator, construtores tunados e uso de objetos em valores padr\u00f5es pode elevar a qualidade do seu c\u00f3digo.&nbsp;<\/p>\n\n\n\n<p>Em um mundo cada vez mais competitivo e cheio de inova\u00e7\u00f5es, <strong>manter-se atualizado<\/strong> com as novidades da linguagem \u00e9 vital para entregar produtos robustos e escal\u00e1veis. O PHP, que outrora foi subestimado, consolida-se agora como uma linguagem madura, capaz de atender projetos de grande porte. Desde a hist\u00f3ria e evolu\u00e7\u00e3o do PHP at\u00e9 as aplica\u00e7\u00f5es mais avan\u00e7adas, seu ecossistema cresceu e mostrou resili\u00eancia.&nbsp;<\/p>\n\n\n\n<p>Por fim, <strong>a cada ano que passa<\/strong>, o PHP se reinventa, incorporando tend\u00eancias de outras linguagens e mantendo uma comunidade ativa que prop\u00f5e solu\u00e7\u00f5es inovadoras. Tais atualiza\u00e7\u00f5es n\u00e3o s\u00e3o apenas est\u00e9ticas: elas contribuem para um ecossistema mais seguro e padronizado, onde recursos como union e intersection types tornam o c\u00f3digo menos sujeito a bugs e falhas de tipagem.&nbsp;<\/p>\n\n\n\n<p>O<strong> <\/strong>PHP ainda tem um futuro pr\u00f3spero pela frente, principalmente quando apoiado em pr\u00e1ticas modernas de c\u00f3digo e nas funcionalidades que foram abordadas. Independentemente do framework ou IDE que voc\u00ea use, essas 8 dicas formam um conjunto coeso de estrat\u00e9gias para alcan\u00e7ar maior produtividade e qualidade em projetos de todos os portes.&nbsp;&nbsp;<\/p>\n\n\n\n<p>E para quem deseja estabilidade e performance em seus projetos, o <a href=\"https:\/\/www.locaweb.com.br\/servidor-vps\/?utm_source=blogpost&amp;utm_medium=own&amp;utm_campaign=blogpost-linguagem-php-servidor-vps&amp;utm_id=blogpost\" target=\"_blank\" rel=\"noreferrer noopener\">Servidor VPS<\/a> Locaweb \u00e9 uma solu\u00e7\u00e3o robusta para aplica\u00e7\u00f5es de alta demanda. Assim, voc\u00ea explora as <strong>melhores pr\u00e1ticas<\/strong> da linguagem sem esbarrar em limita\u00e7\u00f5es de ambiente. Conhe\u00e7a os planos!\u00a0\u00a0<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Um homem est\u00e1 sentado em frente a um computador, trabalhando com linguagem PHP.<\/p>\n","protected":false},"author":24,"featured_media":53980,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[5],"tags":[],"class_list":["post-23254","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-codigo-aberto"],"acf":[],"_links":{"self":[{"href":"https:\/\/www.locaweb.com.br\/blog\/wp-json\/wp\/v2\/posts\/23254","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.locaweb.com.br\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.locaweb.com.br\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.locaweb.com.br\/blog\/wp-json\/wp\/v2\/users\/24"}],"replies":[{"embeddable":true,"href":"https:\/\/www.locaweb.com.br\/blog\/wp-json\/wp\/v2\/comments?post=23254"}],"version-history":[{"count":6,"href":"https:\/\/www.locaweb.com.br\/blog\/wp-json\/wp\/v2\/posts\/23254\/revisions"}],"predecessor-version":[{"id":53984,"href":"https:\/\/www.locaweb.com.br\/blog\/wp-json\/wp\/v2\/posts\/23254\/revisions\/53984"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.locaweb.com.br\/blog\/wp-json\/wp\/v2\/media\/53980"}],"wp:attachment":[{"href":"https:\/\/www.locaweb.com.br\/blog\/wp-json\/wp\/v2\/media?parent=23254"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.locaweb.com.br\/blog\/wp-json\/wp\/v2\/categories?post=23254"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.locaweb.com.br\/blog\/wp-json\/wp\/v2\/tags?post=23254"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}