Novidades do PHP 7
Atualmente o PHP é uma linguagem de script muito conhecida e usada principalmente para o desenvolvimento de aplicações web. Como toda linguagem de programação, com os anos o PHP foi evoluindo e hoje suporta grande a maioria dos conceitos de orientação a objetos.
Por:
.No começo de dezembro de 2015 foi lançada a versão 7 do PHP que trouxe diversas novidades. Nesse post vamos abordar alguma delas.
Null coalescing operator
Temos o seguinte código, queremos fazer a paginação de alguns posts do blog:
<?php use \Caelum\Dao\PostDao; $pagina = $_GET [‘pagina’]; $postDao = new PostDao(); $posts = $postDao ->listaPostsDaPagina( $pagina ); |
Repare que estamos pegando número da página através de um parâmetro do tipo GET portanto teoricamente URL http://blog.caelum.com.br?pagina=1 irá trazer o conteúdo da primeira página. Mas quando acessamos o blog da Caelum, você digita o parâmetro pagina=1 na mão? Geralmente acessamos apenas URL e quando fazemos isso qual é o valor da variável $pagina? Ele vai receber um null além de lançar um warning reclamando que o índice “página” não existe. E o que vai acabar sendo passado para o método listaPostsDaPagina? Null! Queremos garantir que se não existe um valor para a variável $pagina ele pegue os posts da primeira página, como podemos resolver isso? Simples! Vamos fazer um if:
<?php use \Caelum\Dao\PostDao; $pagina = 1; if (isset( $_GET [‘pagina’])) { $pagina = $_GET [‘pagina’]; } $postDao = new PostDao(); $posts = $postDao ->listaPostsDaPagina( $pagina ); |
Para escrever um pouco menos podemos usar um if ternário:
<?php use \Caelum\Dao\PostDao; $pagina = isset( $_GET [‘pagina’]) ? $_GET [‘pagina’] : 1; $postDao = new PostDao(); $posts = $postDao ->listaPostsDaPagina( $pagina ); |
Ok escrevemos um pouco menos, mas quantas vezes você já precisou escrever esse tipo de if na sua vida como desenvolvedor? Se existe um valor para a variável use, se não assuma outro valor padrão. É um condição que acontece com bastante frequência no nosso dia a dia. Por isso agora na versão 7 do PHP temos o null coalescing operator que nada mais é do que um açúcar sintático para esse famoso if. A única alteração é no lugar de usar apenas um ponto de interrogação, vamos passar dois pontos de interrogação e um valor padrão:
<?php use \Caelum\Dao\PostDao; $pagina = $_GET [‘pagina’] ?? 1; $postDao = new PostDao(); $posts = $postDao ->listaPostsDaPagina( $pagina ); |
Legal! Agora escrevemos menos para colocar valores padrão nas nossas variáveis. Você já teve esse problema no seu dia a dia?
Definir tipo de retorno dos métodos
Outra feature interessante que temos no PHP 7 é definir o tipo de retorno para os nossos métodos. Por exemplo o que é método listaPostsDaPagina retorna? Vamos dar uma olhada na classe PostDao;
<?php namespace Caelum\Dao; class ProdutoDao { private PDO $con ; public function listaPostsDaPagina( $pagina ) { $offset = ( $pagina - 1) * 10; $select = “select * from posts order by id limit { $offset },10”; // cria o array que vai conter os posts encontrados $posts = []; // lógica de buscar no banco return $posts ; } } |
Repare que o nosso método vai calcular a partir de qual registro ele vai buscar (offset) e pega os próximos 10 registros. Mas qual é o retorno desse método? Olhando o código percebemos que ele vai devolver um array com vários produtos. Mas o que me impede de simplesmente trocar o return $posts; por return 1; por exemplo ? Nós não definimos qual é o tipo de retorno do nosso método para isso precisamos apenas adicionar dois pontos (:) e o tipo que deverá ser o retorno logo após o nome e parâmetros do método.
public function listaPostsDaPagina( $pagina ) : array { $offset = ( $pagina - 1) * 10; $select = “select * from posts order by id limit { $offset },10”; // cria o array que vai conter os posts encontrados $posts = []; // lógica de buscar no banco return $posts ; } |
Agora sim se tentarmos adicionar um return 1; ele vai lançar uma exceção do tipo TypeError
Uncaught TypeError: Return value of listaPostsDaPagina() must be of the type array, integer returned in /home/renan/Desktop/Caelum/Dao/ProdutoDao.php:37 Stack trace: #0 /home/renan/Desktop/Caelum/index.php(6): listaPostsDaPagina() #1 {main} thrown in /home/renan/Desktop/Caelum/Dao/ProdutoDao.php on line 6 |
Então agora no PHP 7 conseguimos garantir o tipo de retorno dos nossos métodos além disso
Definir tipo para os parâmetros
Vamos dar uma olhada no parâmetro $pagina, o que garante que não vamos simplesmente executar o código abaixo:
<?php use \Caelum\Dao\PostDao; $pagina = $_GET [‘pagina’] ?? 1; $postDao = new PostDao(); $posts = $postDao ->listaPostsDaPagina(“primeira”); |
Nada garante que o meu parâmetro $pagina deve ser do tipo inteiro, portanto vamos forçar esse tipo no parâmetro:
public function listaPostsDaPagina(int $pagina ) : array { $offset = ( $pagina - 1) * 10; $select = “select * from posts order by id limit { $offset },10”; // cria o array que vai conter os posts encontrados $posts = []; // lógica de buscar no banco return $posts ; } |
Agora além de conseguir definir o tipo de retorno dos nossos métodos também conseguimos definir o tipo dos parâmetros para tipos primitivos como int,float,boolean,string . Lembrando que já conseguíamos definir o tipo de parâmetros para ser uma instância de uma classe ou respeite uma interface desde a versão 5 do PHP. Se você quer aprender um pouco mais sobre PHP, eu tenho alguns curso de PHP no Alura. Existem outras novidades no PHP 7 que vou deixar para outro post.
Fonte: Blog Caelum.
Texto original:
http://blog.caelum.com.br/novidades-do-php-7/