Hoje começamos uma série de posts sobre o PHP 7, a nova (e tão aguardada) versão da linguagem mais utilizada por desenvolvedores web. Além do conteúdo de hoje, teremos muitas novidades sobre PHP 7 no blog da Umbler. Nos próximos posts abordaremos assuntos como: recursos obsoletos; sintaxe de variáveis; type hints; error handling; mudanças relacionadas à orientação a objetos e performance.
O PHP 7 traz consigo um grande número de pequenas mudanças na linguagem, novos operadores, funções e mudanças e funções existentes e construtores.
Operadores
Foram adicionados 2 novos operadores ao PHP 7:
Operador Null Coalesce
Esse operador (??) retorna o operando à esquerda se não for nulo, caso contrário retorna o da direita. Algo interessante nesse operador é que ele não emitirá um erro se um dos operandos for uma variável não existente, algo similar à isset().
Exemplo:
//Usando o operador ternário combinado com a função isset()
$resultado = isset($operando) ? $operando : $operando2;
//Usando o novo operador Null Coalesce
$resultado = $operando ?? $operando2;
Os dois exemplos fazem a mesma coisa, e retornam o mesmo resultado porém, o segundo é bem mais enxuto do que o primeiro.
Operador de Comparação Combinada
Também chamado de “operador de nave espacial” (<=>) ele é o primeiro operador ternário do PHP. Ao invés de retornar apenas TRUE ou FALSE, ele pode retornar 3 valores distintos:
-1: se o operador da esquerda for menor que o da direita
0: se os operadores forem iguais
+1: se o operador da esquerda for maior que o da direita
Veja no exemplo a seguir o uso desse operador e do modo tradicional, em uma função que retorna a ordem dos argumentos passados a partir da comparação entre eles.
// Antes do PHP 7
function modo_tradicional($a, $b) {
return ($a < $b) ? -1 : (($a > $b) ? 1 : 0);
}
// Pós PHP 7
function modo_php7($a, $b) {
return $a <=> $b;
}
O resultado final continua o mesmo, mas repare que a função ficou bem mais enxuta com o uso do operador de comparação combinada.
Array como constantes
Antes do PHP 7, contantes definidas com define() só poderiam conter valores escaláveis. Com o PHP 7, você pode definir uma matriz como constante. Veja o exemplo a seguir:
define('MATRIZ',['chave' => 'valor', 'chave2' => 'valor2']);
//Exibindo o valor
echo MATRIZ['chave']; //retorna valor
Função intdiv()/
Essa nova função executa adivisão de número inteiro de forma eficaz, o inverso
do operador módulo da divisão (%).
intdiv(8, 3); //retorna 2
Sessions
Agora é possível passar um array de configurações para a função session_start().
Também foi adicionado um novo parâmetro de configuração, chamado session.lazy_write, que permite que os dados sejam reescritos na sessão caso tenham sido alterados. Esse parâmetro vem por configurado por padrão como TRUE.
Veja a seguir um exemplo de como usar o array de configurações em session_start() e desabilitar o lazy_write.
session_start(['use_strict' => true, 'lazy_write' => false]);
dirname()
A função dirname() passou a aceitar um segundo parâmetro no PHP 7, que permite definir quantos níveis de diretório acima você deseja subir. Por exemplo, temos a seguinte estrutura de diretório:
/home/user/artigos/php
Queremos subir 2 níveis nesse diretório:
$caminho = "/home/user/artigos/php";
dirname($caminho, 2); //retorna /home/user