{"id":504,"date":"2016-03-10T13:33:12","date_gmt":"2016-03-10T16:33:12","guid":{"rendered":"https:\/\/blog.umbler.com\/?p=504"},"modified":"2018-12-06T11:12:28","modified_gmt":"2018-12-06T13:12:28","slug":"php-7-mudancas-na-linguagem","status":"publish","type":"post","link":"https:\/\/blog.umbler.com\/br\/php-7-mudancas-na-linguagem\/","title":{"rendered":"#1 PHP 7 &#8211; Mudan\u00e7as b\u00e1sicas da linguagem"},"content":{"rendered":"<p>Hoje come\u00e7amos uma s\u00e9rie de posts sobre o PHP 7, a nova (e t\u00e3o aguardada) vers\u00e3o da linguagem mais utilizada por desenvolvedores web. Al\u00e9m do conte\u00fado de hoje, teremos muitas novidades sobre PHP 7 no blog da Umbler. Nos pr\u00f3ximos posts abordaremos assuntos como: recursos obsoletos; sintaxe de vari\u00e1veis; type hints; error handling; \u00a0mudan\u00e7as relacionadas \u00e0 orienta\u00e7\u00e3o a objetos e performance.<\/p>\n<p>O PHP 7 traz consigo um grande n\u00famero de pequenas mudan\u00e7as na linguagem, novos operadores, fun\u00e7\u00f5es e mudan\u00e7as e fun\u00e7\u00f5es existentes e construtores.<\/p>\n<h2>Operadores<\/h2>\n<p>Foram adicionados 2 novos operadores ao PHP 7:<\/p>\n<h3>Operador Null Coalesce<\/h3>\n<p>Esse operador (??) retorna o operando \u00e0 esquerda se n\u00e3o for nulo, caso contr\u00e1rio retorna o da direita. Algo interessante nesse operador \u00e9 que ele n\u00e3o emitir\u00e1 um erro se um dos operandos for uma vari\u00e1vel n\u00e3o existente, algo similar \u00e0 isset().<br \/>\nExemplo:<\/p>\n<pre class=\"code-highlighter line-numbers theme-dark\"><code class=\"language-php\">\/\/Usando o operador tern\u00e1rio combinado com a fun\u00e7\u00e3o isset()\r\n$resultado = isset($operando) ? $operando : $operando2;\r\n\/\/Usando o novo operador Null Coalesce\r\n$resultado = $operando ?? $operando2;<\/code><\/pre>\n<p>Os dois exemplos fazem a mesma coisa, e retornam o mesmo resultado por\u00e9m, o segundo \u00e9 bem mais enxuto do que o primeiro.<\/p>\n<h3>Operador de Compara\u00e7\u00e3o Combinada<\/h3>\n<p>Tamb\u00e9m chamado de &#8220;operador de nave espacial&#8221; (&lt;=&gt;) ele \u00e9 o primeiro operador tern\u00e1rio do PHP. Ao inv\u00e9s de retornar apenas TRUE ou FALSE, ele pode retornar 3 valores distintos:<br \/>\n-1: se o operador da esquerda for menor que o da direita<br \/>\n0: se os operadores forem iguais<br \/>\n+1: se o operador da esquerda for maior que o da direita<br \/>\nVeja no exemplo a seguir o uso desse operador e do modo tradicional, em uma fun\u00e7\u00e3o que retorna a ordem dos argumentos passados a partir da compara\u00e7\u00e3o entre eles.<\/p>\n<pre class=\"code-highlighter line-numbers theme-dark\"><code class=\"language-php\">\/\/ Antes do PHP 7\r\nfunction modo_tradicional($a, $b) {\r\nreturn ($a &lt; $b) ? -1 : (($a &gt; $b) ? 1 : 0);\r\n}\r\n\/\/ P\u00f3s PHP 7\r\nfunction modo_php7($a, $b) {\r\nreturn $a &lt;=&gt; $b;\r\n}<\/code><\/pre>\n<p>O resultado final continua o mesmo, mas repare que a fun\u00e7\u00e3o ficou bem mais enxuta com o uso do operador de compara\u00e7\u00e3o combinada.<\/p>\n<h2>Array como constantes<\/h2>\n<p>Antes do PHP 7, contantes definidas com define() s\u00f3 poderiam conter valores escal\u00e1veis. Com o PHP 7, voc\u00ea pode definir uma matriz como constante. Veja o exemplo a seguir:<\/p>\n<pre class=\"code-highlighter line-numbers theme-dark\"><code class=\"language-php\">define('MATRIZ',['chave' =&gt; 'valor', 'chave2' =&gt; 'valor2']);\r\n\/\/Exibindo o valor\r\necho MATRIZ['chave']; \/\/retorna valor<\/code><\/pre>\n<h2>Fun\u00e7\u00e3o intdiv()\/<\/h2>\n<p>Essa nova fun\u00e7\u00e3o executa adivis\u00e3o de n\u00famero inteiro de forma eficaz, o inverso<br \/>\ndo operador m\u00f3dulo da divis\u00e3o (%).<\/p>\n<pre class=\"code-highlighter line-numbers theme-dark\"><code class=\"language-php\">intdiv(8, 3); \/\/retorna 2<\/code><\/pre>\n<h2>Sessions<\/h2>\n<p>Agora \u00e9 poss\u00edvel passar um array de configura\u00e7\u00f5es para a fun\u00e7\u00e3o session_start().<\/p>\n<p>Tamb\u00e9m foi adicionado um novo par\u00e2metro de configura\u00e7\u00e3o, chamado session.lazy_write, que permite que os dados sejam reescritos na sess\u00e3o caso tenham sido alterados. Esse par\u00e2metro vem por configurado por padr\u00e3o como TRUE.<\/p>\n<p>Veja a seguir um exemplo de como usar o array de configura\u00e7\u00f5es em session_start() e desabilitar o lazy_write.<\/p>\n<pre class=\"code-highlighter line-numbers theme-dark\"><code class=\"language-php\">session_start(['use_strict' =&gt; true, 'lazy_write' =&gt; false]);<\/code><\/pre>\n<h2>dirname()<\/h2>\n<p>A fun\u00e7\u00e3o dirname() passou a aceitar um segundo par\u00e2metro no PHP 7, que permite definir quantos n\u00edveis de diret\u00f3rio acima voc\u00ea deseja subir. Por exemplo, temos a seguinte estrutura de diret\u00f3rio:<br \/>\n<code>\/home\/user\/artigos\/php<\/code><br \/>\nQueremos subir 2 n\u00edveis nesse diret\u00f3rio:<\/p>\n<pre class=\"code-highlighter line-numbers theme-dark\"><code class=\"language-php\">$caminho = \"\/home\/user\/artigos\/php\";\r\ndirname($caminho, 2); \/\/retorna \/home\/user<\/code><\/pre>\n<div class=\"alert alert-info\"><strong>Quer ver todas as mudan\u00e7as do PHP 7 na pr\u00e1tica? <a href=\"https:\/\/umbler.com\" target=\"_blank\" rel=\"noopener\">Use-o na Umbler!<\/a><\/strong><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Hoje come\u00e7amos uma s\u00e9rie de posts sobre o PHP 7, a nova (e t\u00e3o aguardada) vers\u00e3o da linguagem mais utilizada por desenvolvedores web. Al\u00e9m do conte\u00fado de hoje, teremos muitas novidades sobre PHP 7 no blog da Umbler. Nos pr\u00f3ximos posts abordaremos assuntos como: recursos obsoletos; sintaxe de vari\u00e1veis; type hints; error handling; \u00a0mudan\u00e7as relacionadas [&hellip;]<\/p>\n","protected":false},"author":37,"featured_media":5612,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3,23],"tags":[55,56,30,57,58],"class_list":["post-504","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-comunidade","category-dev","tag-apache","tag-linux","tag-php","tag-php-7","tag-php7"],"_links":{"self":[{"href":"https:\/\/blog.umbler.com\/br\/wp-json\/wp\/v2\/posts\/504"}],"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\/37"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.umbler.com\/br\/wp-json\/wp\/v2\/comments?post=504"}],"version-history":[{"count":0,"href":"https:\/\/blog.umbler.com\/br\/wp-json\/wp\/v2\/posts\/504\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.umbler.com\/br\/wp-json\/wp\/v2\/media\/5612"}],"wp:attachment":[{"href":"https:\/\/blog.umbler.com\/br\/wp-json\/wp\/v2\/media?parent=504"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.umbler.com\/br\/wp-json\/wp\/v2\/categories?post=504"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.umbler.com\/br\/wp-json\/wp\/v2\/tags?post=504"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}