SlideShare uma empresa Scribd logo
Conheça as principais novidades do
PHP 7.4 & 8.0!
Marcos Marcolin, IXCsoft.
Roteiro
● Releases;
● Principais novidades:
○ PHP 7.4;
○ PHP 8.0;
● Quizizz.
Releases
● Versões:
○ 3.0 -> Jul, 1998 / Oct, 2000;
○ 4.0 -> May, 2000 / Aug, 2008;
○ 5.0 -> Jul, 2004 / Jan, 2019;
○ 7.0 -> Dec, 2015 / Dec 2018;
○ 7.3 -> Dec, 2018 / Dec 2021;
○ 7.4 -> Nov, 2019 / Nov 2022;
○ 8.0 -> Nov, 2020 / Nov 2023.
PHP 7.4
● Preloading;
● Typed properties;
● Arrow functions;
● Unpacking Inside Arrays;
● Null Coalesce Assignment Operator;
● Numeric literal separator;
● Deprecated Features;
● https://www.php.net/releases/7_4_0.php
Principais novidades
Preloading
● Melhorar a performance;
● Não suportado em Windows;
● A configuração envolve a ativação do
opcache;
● Arquivo executado somente na
inicialização do servidor;
● Ex: carregamento de frameworks e/ou
hot classes.
Preloading
Preloading
https://hashnode.com/post/preload-benchmarks-in-php-74-ck582cxol004cv2s1z1ffgkmu
Preloading
● Outros benchmarking:
○ https://developers.ibexa.co/blog/bench
marks-php-7.4-8.0-jit-opcache-preloadin
g-symfony
○ https://blog.blackfire.io/php-preloading-
and-performance-impact.html
○ https://github.com/composer/composer/
issues/7777
Typed
Properties
Typed
Properties
Typed
Properties
Typed
Properties
● bool;
● int;
● float;
● string;
● array;
● object;
● ?(nullable)
● class & interfaces
Arrow
Functions
● Mais conhecido no Javascript;
● Tem como objetivo deixar o código mais
enxuto;
● Uso da palavra fn;
Arrow
Functions
Arrow
Functions
Unpacking
Inside
Arrays
● Desempacotar arrays;
● Simplificação de código;
Unpacking
Inside
Arrays
Unpacking
Inside
Arrays
Null
Coalesce
Assignment
Operator
● Simplificar código;
● Operador ternário;
Null
Coalesce
Assignment
Operator
Null
Coalesce
Assignment
Operator
Numeric
literal
separator
● Separação visual de valores;
● Utilização do underscore “_”
● Float, decimal, hexadecimal, binário,
etc...
Numeric
literal
separator
Numeric
literal
separator
Numeric
literal
separator
Deprecated
Features
● array_key_exists() em objetos;
● get_magic_quotes_gpc() sempre
retornará false;
● Parâmetros inversos na função
implode($glue, $parts);
PHP 8
PHP 8.0 é uma atualização importante
da linguagem PHP. Ela contém muitos novos
recursos e otimizações, incluindo
argumentos nomeados, união de tipos,
atributos, promoção de propriedade do
construtor, expressão match, operador
nullsafe, JIT e melhorias no sistema de tipos,
tratamento de erros e consistência.
Principais novidades
PHP 8
● JIT;
● Constructor property promotion;
● Union types;
● Nullsafe operator;
● Match expression;
● Non-capturing exception catches;
● str_contains(), str_starts_with(),
str_ends_with();
● Operator @.
Principais novidades
JIT
(Compilador
Just in Time)
“O PHP JIT é implementado como uma
parte quase independente do OPcache. Ele
pode ser habilitado/desabilitado em tempo
de compilação e em tempo de execução do
PHP. Quando habilitado, o código nativo dos
arquivos PHP é armazenado em uma região
adicional da memória compartilhada do
OPcache e op_array→opcodes[].
Manipulador(es) mantém apontadores para
os pontos de entrada do código JIT-ed.”
JIT vs
OPcache
Então, como chegamos ao JIT e qual é a
diferença entre JIT vs OPcache?
JIT vs
OPcache
Então, como chegamos ao JIT e qual é a
diferença entre JIT vs OPcache?
Para entender melhor o que é o JIT para
PHP, vamos dar uma rápida olhada em como
o PHP executa desde o código fonte até o
resultado final.
JIT vs
OPcache
Tokenizing
https://github.com/php/php-src/blob/master/Zend/zend_language_parser.y
AST(Abstract
Syntax Tree)
while b ≠ 0
if a > b
a := a − b
else
b := b − a
return a
JIT vs
OPcache
A Extensão OPcache
PHP é uma linguagem interpretada. Isto
significa que, quando um script PHP é
executado, o intérprete analisa, compila e
executa o código uma e outra vez a cada
solicitação. Isto pode resultar em
desperdício de recursos da CPU e tempo
adicional.
JIT vs
OPcache
A partir do PHP 5.5, a extensão Zend OPcache está disponível por padrão.
E o JIT faz o
quê?
Mesmo que os opcodes estejam na forma de
representação intermediária de baixo nível, eles
ainda têm que ser compilados em código de
máquina. JIT “não introduz nenhuma forma
adicional de IR (Representação Intermediária)”,
mas utiliza DynASM (Dynamic Assembler for code
generation engines) para gerar código nativo
diretamente do byte-código PHP.
E o JIT faz o
quê?
Não tem entendi nada, e você?
E o JIT faz o
quê?
Não tem entendi nada, e você?
Em resumo, o JIT traduz as partes quentes do
código intermediário em código de máquina.
Ao contornar a compilação, ele é capaz de trazer
melhorias consideráveis na performance e uso
de memória.
E o JIT faz o
quê?
Agora entendeu?
E o JIT faz o
quê?
Agora entendeu?
● Substituí a etapa de execução dentro da
ZendVM;
● A ZendVM é escrita em C e performa
várias operações antes de executar cada
OpCode;
● É aí que entra o JIT;
E o JIT faz o
quê?
● Ao invés de executar toda essas
operações da VM escrita em C ele
executa diretamente no processador.
Isso dá um ganho de desempenho muito
grande.
E o JIT faz o
quê?
● Ao invés de executar toda essas
operações da VM escrita em C ele
executa diretamente no processador.
Isso dá um ganho de desempenho muito
grande.
● O JIT é implementado dentro da
extensão OpCache, então a mesma
precisa estar instalada para o JIT
funcionar.
JIT
JIT
Onde terá mais ganho de performance?
● Em funções que fazem uso massivo de
funções lógicas e matemáticas trazem a
possibilidade de usar o PHP em ambiente
que antes não era cogitável, como por
exemplo inteligência artificial, machine
learning, tratamento de mídia, etc.
JIT
Onde terá mais ganho de performance?
● Em funções que fazem uso massivo de
funções lógicas e matemáticas trazem a
possibilidade de usar o PHP em ambiente
que antes não era cogitável, como por
exemplo inteligência artificial, machine
learning, tratamento de mídia, etc.
● Para operações de entrada, saída e
leitura de arquivos o ganho não parece
ser muito expressivo.
Constructor
property
promotion
Constructor
property
promotion
Union
types
Union
types
Nullsafe
operator
Nullsafe
operator
Match
expression
Match
expression
Non-capturing
exception
catches
Non-capturing
exception
catches
str_contains()
*25 Anos depois
str_starts_with()
&
str_ends_with()
Referências
● https://www.php.net/releases/7_4_0.php
● https://www.php.net/releases/8.0/en.php
● https://www.amitmerchant.com
● http://www.phpbenchmarks.com/en/benchmark/php/7.4
● http://www.phpbenchmarks.com/en/benchmark/php/8.0
● https://kinsta.com/pt/blog/php-8/
● https://medium.com/i9xp-comunidade/just-in-time-compiler-no-php-8-5ea121f56afb
● https://thephp.website/br/edicao/php-8-jit/
● https://www.programmersought.com/article/19391483342/
● https://github.com/php/php-src/blob/master/Zend/zend_language_parser.y

Mais conteúdo relacionado

Mais procurados

[Testes] frameworks de testes end to-end baseados em node js
[Testes] frameworks de testes end to-end baseados em node js [Testes] frameworks de testes end to-end baseados em node js
[Testes] frameworks de testes end to-end baseados em node js
Bárbara Cabral da Conceição, CTFL
 
Nodejs - A performance que eu sempre quis ter
Nodejs - A performance que eu sempre quis terNodejs - A performance que eu sempre quis ter
Nodejs - A performance que eu sempre quis ter
Emerson Macedo
 
Node.JS - Workshop do básico ao avançado
Node.JS - Workshop do básico ao avançadoNode.JS - Workshop do básico ao avançado
Node.JS - Workshop do básico ao avançado
Eduardo Bohrer
 
Introdução ao Node.js - FATEC SP
Introdução ao Node.js - FATEC SPIntrodução ao Node.js - FATEC SP
Introdução ao Node.js - FATEC SP
Arthur Fücher
 
NodeJS - Tutorial de forma simples e pratica.
NodeJS - Tutorial de forma simples e pratica.NodeJS - Tutorial de forma simples e pratica.
NodeJS - Tutorial de forma simples e pratica.
Filipe Morelli
 
assertTrue($tdd)
assertTrue($tdd)assertTrue($tdd)
assertTrue($tdd)
Alexandre Gaigalas
 
TDC2016 | Trilha PHP - Xdebug: Seus problemas acabaram!
TDC2016 | Trilha PHP - Xdebug: Seus problemas acabaram!TDC2016 | Trilha PHP - Xdebug: Seus problemas acabaram!
TDC2016 | Trilha PHP - Xdebug: Seus problemas acabaram!
tdc-globalcode
 
Xdebug seus problemas acabaram - TDC - PHPeste
Xdebug   seus problemas acabaram - TDC - PHPesteXdebug   seus problemas acabaram - TDC - PHPeste
Xdebug seus problemas acabaram - TDC - PHPeste
Vitor Mattos
 
Node JS - Parte 1
Node JS - Parte 1Node JS - Parte 1
Node JS - Parte 1
Bruno Catão
 
Laravel + Vue: Como começar
Laravel + Vue: Como começarLaravel + Vue: Como começar
Laravel + Vue: Como começar
Leandro Ferreira
 
Conhecendo o Novo REST Framework
Conhecendo o Novo REST FrameworkConhecendo o Novo REST Framework
Conhecendo o Novo REST Framework
Mario Guedes
 
Uma visão rápida sobre Nodejs
Uma visão rápida sobre NodejsUma visão rápida sobre Nodejs
Uma visão rápida sobre Nodejs
Rafael Soares
 
Javascript por debaixo dos panos
Javascript por debaixo dos panosJavascript por debaixo dos panos
Javascript por debaixo dos panos
Laís Lima
 
Drupal + Rex
Drupal + RexDrupal + Rex
Drupal + Rex
paulo_graca
 
Cacheamento Lado Servidor
Cacheamento Lado ServidorCacheamento Lado Servidor
Cacheamento Lado Servidor
Mario Guedes
 
Xdebug seus problemas acabaram - tdc floripa 2017
Xdebug   seus problemas acabaram - tdc floripa 2017Xdebug   seus problemas acabaram - tdc floripa 2017
Xdebug seus problemas acabaram - tdc floripa 2017
Vitor Mattos
 
Javascript por debaixo dos panos
Javascript por debaixo dos panosJavascript por debaixo dos panos
Javascript por debaixo dos panos
Laís Lima
 

Mais procurados (17)

[Testes] frameworks de testes end to-end baseados em node js
[Testes] frameworks de testes end to-end baseados em node js [Testes] frameworks de testes end to-end baseados em node js
[Testes] frameworks de testes end to-end baseados em node js
 
Nodejs - A performance que eu sempre quis ter
Nodejs - A performance que eu sempre quis terNodejs - A performance que eu sempre quis ter
Nodejs - A performance que eu sempre quis ter
 
Node.JS - Workshop do básico ao avançado
Node.JS - Workshop do básico ao avançadoNode.JS - Workshop do básico ao avançado
Node.JS - Workshop do básico ao avançado
 
Introdução ao Node.js - FATEC SP
Introdução ao Node.js - FATEC SPIntrodução ao Node.js - FATEC SP
Introdução ao Node.js - FATEC SP
 
NodeJS - Tutorial de forma simples e pratica.
NodeJS - Tutorial de forma simples e pratica.NodeJS - Tutorial de forma simples e pratica.
NodeJS - Tutorial de forma simples e pratica.
 
assertTrue($tdd)
assertTrue($tdd)assertTrue($tdd)
assertTrue($tdd)
 
TDC2016 | Trilha PHP - Xdebug: Seus problemas acabaram!
TDC2016 | Trilha PHP - Xdebug: Seus problemas acabaram!TDC2016 | Trilha PHP - Xdebug: Seus problemas acabaram!
TDC2016 | Trilha PHP - Xdebug: Seus problemas acabaram!
 
Xdebug seus problemas acabaram - TDC - PHPeste
Xdebug   seus problemas acabaram - TDC - PHPesteXdebug   seus problemas acabaram - TDC - PHPeste
Xdebug seus problemas acabaram - TDC - PHPeste
 
Node JS - Parte 1
Node JS - Parte 1Node JS - Parte 1
Node JS - Parte 1
 
Laravel + Vue: Como começar
Laravel + Vue: Como começarLaravel + Vue: Como começar
Laravel + Vue: Como começar
 
Conhecendo o Novo REST Framework
Conhecendo o Novo REST FrameworkConhecendo o Novo REST Framework
Conhecendo o Novo REST Framework
 
Uma visão rápida sobre Nodejs
Uma visão rápida sobre NodejsUma visão rápida sobre Nodejs
Uma visão rápida sobre Nodejs
 
Javascript por debaixo dos panos
Javascript por debaixo dos panosJavascript por debaixo dos panos
Javascript por debaixo dos panos
 
Drupal + Rex
Drupal + RexDrupal + Rex
Drupal + Rex
 
Cacheamento Lado Servidor
Cacheamento Lado ServidorCacheamento Lado Servidor
Cacheamento Lado Servidor
 
Xdebug seus problemas acabaram - tdc floripa 2017
Xdebug   seus problemas acabaram - tdc floripa 2017Xdebug   seus problemas acabaram - tdc floripa 2017
Xdebug seus problemas acabaram - tdc floripa 2017
 
Javascript por debaixo dos panos
Javascript por debaixo dos panosJavascript por debaixo dos panos
Javascript por debaixo dos panos
 

Semelhante a Novidades PHP 7.4 e 8.0!

Qualidade em projetos PHP - PHPSC Conf 2011
Qualidade em projetos PHP - PHPSC Conf 2011Qualidade em projetos PHP - PHPSC Conf 2011
Qualidade em projetos PHP - PHPSC Conf 2011
Luís Cobucci
 
Qualidade em projetos PHP - SoLiSC 2011
Qualidade em projetos PHP - SoLiSC 2011Qualidade em projetos PHP - SoLiSC 2011
Qualidade em projetos PHP - SoLiSC 2011
Luís Cobucci
 
TDC2018SP | Trilha PHP Essencial - O que nao fazer ao atualizar para o PHP 7
TDC2018SP | Trilha PHP Essencial - O que nao fazer ao atualizar para o PHP 7TDC2018SP | Trilha PHP Essencial - O que nao fazer ao atualizar para o PHP 7
TDC2018SP | Trilha PHP Essencial - O que nao fazer ao atualizar para o PHP 7
tdc-globalcode
 
CEPUG 2 - Bem-vindo a Framework CodeIgniter
CEPUG 2 - Bem-vindo a Framework CodeIgniterCEPUG 2 - Bem-vindo a Framework CodeIgniter
CEPUG 2 - Bem-vindo a Framework CodeIgniter
Eric Silva
 
Google App Engine e PHP
Google App Engine e PHPGoogle App Engine e PHP
Google App Engine e PHP
Luiz Messias
 
O que não fazer ao atualizar para o PHP 7 @ TDC SP 2018
O que não fazer ao atualizar para o PHP 7 @ TDC SP 2018 O que não fazer ao atualizar para o PHP 7 @ TDC SP 2018
O que não fazer ao atualizar para o PHP 7 @ TDC SP 2018
Gabriel Machado
 
TDC2017 | São Paulo - Trilha Containers How we figured out we had a SRE team ...
TDC2017 | São Paulo - Trilha Containers How we figured out we had a SRE team ...TDC2017 | São Paulo - Trilha Containers How we figured out we had a SRE team ...
TDC2017 | São Paulo - Trilha Containers How we figured out we had a SRE team ...
tdc-globalcode
 
CURSO DE PHP PARA INICIANTES - AULA 1
CURSO DE PHP PARA INICIANTES - AULA 1CURSO DE PHP PARA INICIANTES - AULA 1
CURSO DE PHP PARA INICIANTES - AULA 1
Norivan Oliveira
 
Aprenda a programar python
Aprenda a programar pythonAprenda a programar python
Aprenda a programar python
Lourenço Junior
 
Microcontroladores pic
Microcontroladores picMicrocontroladores pic
Microcontroladores pic
Cesar Prim
 
Integração contínua em PHP com Jenkins
Integração contínua em PHP com JenkinsIntegração contínua em PHP com Jenkins
Integração contínua em PHP com Jenkins
Gilmar Pupo
 
Webinar: Utilizando o Yocto Project para automatizar o desenvolvimento em Lin...
Webinar: Utilizando o Yocto Project para automatizar o desenvolvimento em Lin...Webinar: Utilizando o Yocto Project para automatizar o desenvolvimento em Lin...
Webinar: Utilizando o Yocto Project para automatizar o desenvolvimento em Lin...
Embarcados
 
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
tdc-globalcode
 
TDC2018SP | Trilha Serveless - Pra que SERVErless?
TDC2018SP | Trilha Serveless - Pra que SERVErless?TDC2018SP | Trilha Serveless - Pra que SERVErless?
TDC2018SP | Trilha Serveless - Pra que SERVErless?
tdc-globalcode
 
Táticas de obfuscação de código em projetos PHP
Táticas de obfuscação de código em projetos PHPTáticas de obfuscação de código em projetos PHP
Táticas de obfuscação de código em projetos PHP
Murilo Chianfa
 
Carrefour E-commerce - Multicloud Brasil Day 2017
Carrefour E-commerce - Multicloud Brasil Day 2017Carrefour E-commerce - Multicloud Brasil Day 2017
Carrefour E-commerce - Multicloud Brasil Day 2017
Denis Santos
 
Construção e provisionamento de ambientes de desenvolvimento virtualizados
Construção e provisionamento de ambientes  de desenvolvimento virtualizadosConstrução e provisionamento de ambientes  de desenvolvimento virtualizados
Construção e provisionamento de ambientes de desenvolvimento virtualizados
Thiago Rodrigues
 
Canivete python
Canivete pythonCanivete python
Canivete python
Anderson Dantas
 
Putting a-heat-with-thermostat
Putting a-heat-with-thermostatPutting a-heat-with-thermostat
Putting a-heat-with-thermostat
Ricardo Martinelli de Oliveira
 
PHP para aplicações Web de grande porte
PHP para aplicações Web  de grande portePHP para aplicações Web  de grande porte
PHP para aplicações Web de grande porte
Felipe Ribeiro
 

Semelhante a Novidades PHP 7.4 e 8.0! (20)

Qualidade em projetos PHP - PHPSC Conf 2011
Qualidade em projetos PHP - PHPSC Conf 2011Qualidade em projetos PHP - PHPSC Conf 2011
Qualidade em projetos PHP - PHPSC Conf 2011
 
Qualidade em projetos PHP - SoLiSC 2011
Qualidade em projetos PHP - SoLiSC 2011Qualidade em projetos PHP - SoLiSC 2011
Qualidade em projetos PHP - SoLiSC 2011
 
TDC2018SP | Trilha PHP Essencial - O que nao fazer ao atualizar para o PHP 7
TDC2018SP | Trilha PHP Essencial - O que nao fazer ao atualizar para o PHP 7TDC2018SP | Trilha PHP Essencial - O que nao fazer ao atualizar para o PHP 7
TDC2018SP | Trilha PHP Essencial - O que nao fazer ao atualizar para o PHP 7
 
CEPUG 2 - Bem-vindo a Framework CodeIgniter
CEPUG 2 - Bem-vindo a Framework CodeIgniterCEPUG 2 - Bem-vindo a Framework CodeIgniter
CEPUG 2 - Bem-vindo a Framework CodeIgniter
 
Google App Engine e PHP
Google App Engine e PHPGoogle App Engine e PHP
Google App Engine e PHP
 
O que não fazer ao atualizar para o PHP 7 @ TDC SP 2018
O que não fazer ao atualizar para o PHP 7 @ TDC SP 2018 O que não fazer ao atualizar para o PHP 7 @ TDC SP 2018
O que não fazer ao atualizar para o PHP 7 @ TDC SP 2018
 
TDC2017 | São Paulo - Trilha Containers How we figured out we had a SRE team ...
TDC2017 | São Paulo - Trilha Containers How we figured out we had a SRE team ...TDC2017 | São Paulo - Trilha Containers How we figured out we had a SRE team ...
TDC2017 | São Paulo - Trilha Containers How we figured out we had a SRE team ...
 
CURSO DE PHP PARA INICIANTES - AULA 1
CURSO DE PHP PARA INICIANTES - AULA 1CURSO DE PHP PARA INICIANTES - AULA 1
CURSO DE PHP PARA INICIANTES - AULA 1
 
Aprenda a programar python
Aprenda a programar pythonAprenda a programar python
Aprenda a programar python
 
Microcontroladores pic
Microcontroladores picMicrocontroladores pic
Microcontroladores pic
 
Integração contínua em PHP com Jenkins
Integração contínua em PHP com JenkinsIntegração contínua em PHP com Jenkins
Integração contínua em PHP com Jenkins
 
Webinar: Utilizando o Yocto Project para automatizar o desenvolvimento em Lin...
Webinar: Utilizando o Yocto Project para automatizar o desenvolvimento em Lin...Webinar: Utilizando o Yocto Project para automatizar o desenvolvimento em Lin...
Webinar: Utilizando o Yocto Project para automatizar o desenvolvimento em Lin...
 
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
 
TDC2018SP | Trilha Serveless - Pra que SERVErless?
TDC2018SP | Trilha Serveless - Pra que SERVErless?TDC2018SP | Trilha Serveless - Pra que SERVErless?
TDC2018SP | Trilha Serveless - Pra que SERVErless?
 
Táticas de obfuscação de código em projetos PHP
Táticas de obfuscação de código em projetos PHPTáticas de obfuscação de código em projetos PHP
Táticas de obfuscação de código em projetos PHP
 
Carrefour E-commerce - Multicloud Brasil Day 2017
Carrefour E-commerce - Multicloud Brasil Day 2017Carrefour E-commerce - Multicloud Brasil Day 2017
Carrefour E-commerce - Multicloud Brasil Day 2017
 
Construção e provisionamento de ambientes de desenvolvimento virtualizados
Construção e provisionamento de ambientes  de desenvolvimento virtualizadosConstrução e provisionamento de ambientes  de desenvolvimento virtualizados
Construção e provisionamento de ambientes de desenvolvimento virtualizados
 
Canivete python
Canivete pythonCanivete python
Canivete python
 
Putting a-heat-with-thermostat
Putting a-heat-with-thermostatPutting a-heat-with-thermostat
Putting a-heat-with-thermostat
 
PHP para aplicações Web de grande porte
PHP para aplicações Web  de grande portePHP para aplicações Web  de grande porte
PHP para aplicações Web de grande porte
 

Novidades PHP 7.4 e 8.0!