O Lançamento do PHP 7 não e necessariamente uma novidade, isso todos nós sabemos mas fiquei encucado com o real desempenho dele, e acabei optando por realizar alguns testes, então vamos aos testes!
O PHP 7 Traz enumeras vantagens em relação ao seu antecessor (PHP 5) e a que mais me chamou a atenção, supostamente ele pode ser até 9 vezes mais rápido e ele realmente é?
Pois bem, fiz os testes e ele se comportou incrivelmente bem em testes de desempenho focados somente em processamento ao lado do servidor.
E vamos aos testes:
Testes | PHP 7.0 | PHP 5.6 |
simple | 0.096 | 0.292 |
simplecall | 0.016 | 3.074 |
simpleucall | 0.090 | 3.316 |
simpleudcall | 0.095 | 3.336 |
mandel | 0.288 | 1.164 |
mandel2 | 0.318 | 1.080 |
ackermann(7) | 0.086 | 2.243 |
ary(50000) | 0.006 | 0.057 |
ary2(50000) | 0.005 | 0.037 |
ary3(2000) | 0.128 | 0.504 |
fibo(30) | 0.246 | 8.258 |
hash1(50000) | 0.020 | 0.362 |
hash2(500) | 0.016 | 0.045 |
heapsort(20000) | 0.060 | 0.313 |
matrix(20) | 0.058 | 0.246 |
nestedloop(12) | 0.138 | 0.518 |
sieve(30) | 0.032 | 0.257 |
strcat(200000) | 0.008 | 0.037 |
Total | 1.706 | 25.140 |
Configuração utilizada para os testes:
- Sistema Operacional : Windows 7
- Memória Ram: 6 GB DRR 3 1200Mhz
- Processador: i5-2400 @ 3,10GHZ
- Apache: 2.4.23
- PHP 5.6.25 e PHP 7.0.10
Quanto menor o valor melhor, então como podem ver o PHP 7 está significativamente mais rápido que seu antecessor. Caso queria realizar o teste ele está disponível no GitHub para baixar o código basta seguir no seguinte Link: zent/bench.php, baixar e executar, recomendo executar diretamente pelo terminal ou Prompt de comando. (Caso não saiba como executar pelo terminal comenta que tentarei ajudar).
Além da melhora no desempenho ele novos recursos. e a remoção de outros.
Novos recursos do PHP 7
1) Desempenho:
Seu incrível desempenho, e o que me levou a realizar os test e publicar esse post.
2) Mudança no tratamento de Erros Fatais:
Por exemplo. caso você realize a seguinte script:
qualquer_erro();
echo "Com erro o codigo nao procede";
Fatal error: Uncaught Error: Call to undefined function qua...Agora quando utilizamos o seguinte exemplo:
try {
qualquer_erro();
} catch (Error $e) {
echo "Ocorreu um erro: " . $e->getMessage();
}
echo "Mesmo com erro o codigo procede";
Ocorreu um erro: Call to undefined function qualquer_erro()Mesmo com erro o código procede
Será exibido a mensagem de erro com a diferença que o código não irá executar como erro fatal e consequentemente prosseguindo com a execução.
3) Indução de Tipos: Scalar Types:
O PHP não é uma linguagem tipada (saiba mais sobre Linguagem Tipada).
Aos poucos ela vem ganhando alguns recursos que a torna fracamente tipada.
Isso significa que podemos criar códigos mais consistentes e menos suscetíveis a erros e problemas.
O PHP 5 já possui o recurso de Indução de Tipos.
É possível definir alguns tipos para parâmetros de métodos e funções. Mas só é possível definir dois tipos: arrays (o tipo “array”) e objetos (com o nome da classe).
A partir do PHP 7, poderemos usar outros tipos também: int, float, string e bool.
Esses tipos podem ser definidos nos parâmetros de funções e métodos, como já era feito no PHP 5. Mas agora há uma novidade: também poderemos definir o tipo do retorno.
Isso significa que podemos criar códigos mais consistentes e menos suscetíveis a erros e problemas.
O PHP 5 já possui o recurso de Indução de Tipos.
É possível definir alguns tipos para parâmetros de métodos e funções. Mas só é possível definir dois tipos: arrays (o tipo “array”) e objetos (com o nome da classe).
A partir do PHP 7, poderemos usar outros tipos também: int, float, string e bool.
Esses tipos podem ser definidos nos parâmetros de funções e métodos, como já era feito no PHP 5. Mas agora há uma novidade: também poderemos definir o tipo do retorno.
4) Tipo de Retorno de Funções e Métodos:
O PHP 7 vai permitir definir o tipo de retorno de uma função ou método.
Por exemplo:
function test($a, $b): float
{
return $a + $b + 1.5;
}
var_dump(test(1.5, 2.8));
float 5.8
O retorno será oque foi predeterminado, nesse caso o float, também podendo usar todo o tipo de retorno como int, float, string, bool, array e objeto.
5) Um novo Operador Spaceship():
Esse novo operador tem o nome de "Spaceship" ele é muito similar a função strcmp() que pode ser usar para comparar 2 operadores.
var_dump(5 <=> 3); // retorna 1
var_dump(10 <=> 10); // retorna 0
var_dump(-2 <=> -1); // retorna -1
Em outras palavras ele irar retornar 1 quando o primeiro operador for maior, 0 quando forem iguais, e -1 quando o primeiro for menor que o segundo.
6) Null Coalesce Operator (operador ??)
Ele é muito similar ao isset() o qual utilizamos para verificar a existência variáveis como utilizandos o isset() em $_GET ou $_POST.Veja como ficaria a utilização do "??"
$email = $_GET['email'] ?? 'valor padrão';
$email = isset($_GET['email']) ? $_GET['email'] : 'valor padrão';
echo $email;
Utilizando o Operador "??" como na primeira linha teria o mesmo resultado que utilizar o isset juntamente da definição da variável. PS: Muito pratico 7) Classes Anônimas
Desde a versão do PHP 5.4 já é permitida a criação de funções anônimas as quais são muito úteis para criação da callbacks, vamos a um exemplo:Fazendo uso de funções anônimas; (exemplo simples)
Funções anonimas, também conhecidas como closures, permitem a criação de funções que não tem o nome especificado. Elas são mais úteis como o valor de parâmetros callback, mas podem tem vários outros usos.
Exemplo de como definir uma função anonima para uma variável:
$greet = function($name){
printf("Hello %s\r\n", $name);
};
$greet('World');
$greet('PHP');
Fazendo uso do array_map()
Aplica uma função em todos os elementos dos arrays dados:
function cube($n){
return($n * $n * $n);
}
$a = array(1, 2, 3, 4, 5);
$b = array_map("cube", $a);
print_r($b);
//RETORNO
Array
(
[0] => 1
[1] => 8
[2] => 27
[3] => 64
[4] => 125
)
Retornando uma classe definida dentro da função:
function createObject(){
return new class{
public function test()
{
echo "test END OF LIFE =>" . PHP_EOL;
}
};
}
$obj = createObject();
$obj->test();
Nesse exemplo temos acesso ao objeto test() diretamente em $obj;
Mudanças do PHP 7
Algumas funções do PHP foram removidas definitivamente no PHP 7 como por exemplo a nossa velha conhecida mysql_connect... que já é reconhecida como obsoleta dentre outras alterações.1) Remoção do mysql_*
Pois bem o mysql_* foi removido isso é (mysql_connect(), mysql_query()), elas ainda funcionavam no PHP 5.5 mas já eram consideradas como recurso obsoleto (Deprecated).A alternativa é a utilização do mysqli_* ou do aclamado PDO o qual recomendo fortemente sua utilização.
2) Funções ereg_* Removidas
Juntamente das funções mysql_* as funções ereg_* foram removidas, como: ereg(), ereg_replace, eregi(), as quais já eram consideradas obsoletas desde o PHP 5.3.Agora é necessário utiliar a biblioteca PREG como: pre_mach(), preg_replace().
Particularmente eu nunca chgei a utilizar o ereg pois ja cheguei no php utilizando o php 5.3.
3) Construtores do PHP 4 Obsoletos
Nos primórdios da orientação a objeto do PHP isso é antes do PHP 5 era necessário denominar os construtores do mesmo nome que a classe:
class classeTriste
{
function classeTriste()
{
echo "Construtor chamado";
}
}
Agora não é necessário fazer essa gambiarra feia sem contar que também demandaria mais tempo para manutenção do código.
Com o PHP 7 ficaria assim:
class PhpFeliz
{
public function __construct()
{
echo "Construtor chamado";
}
}
No PHP 7 recomenda-se a utilização do método __construct pois o construtor padrão do PHP 4 ainda funciona porem já está como obsoleto (Deprecated).
Conclusão:
Em poucas palavras pois acabei escrevendo mais do que imaginei o PHP 7 traz novos recursos porem ao meu ver o real destaque dele seja seu desempenho que está surpreendente melhor que seu antecessor.As novas novas funções que ele traz facilitam e agilizam muito a produção e a qualidade do código. Particularmente eu gostei muito das Classes anônimas e dos operadores Coalesce.
Então isso é tudo!
Referencias:
https://tableless.com.br/
Se vocês gostaram desse Post não deixe de compartilhar com seus amigos!!!
E para não perder nenhuma novidade nos sigam nas redes sociais:
Twitter: @Bulfaitelo
Facebook: Bulfaitelo Project
Blogger: Bulfaitelo Project