php 7 - a maioridade do php
TRANSCRIPT
A Maioridade do PHP
Daniel Archer - Setembro/2015The Developers Conference 2015 – Porto Alegre
7
Quem sou euFormado pelo Senac em
2011
Palestrante da PHP Conference Brasil
5 Anos de experiência em PHP
Desenvolvedor PHP Sênior na Servicoop
Coordenador PHPRS
Mas e o PHP6?• 2005 – Andrei Zmievski• UTF-16• Unicode everywhere!– Core– Extensões– API
• PHP6 = PHP5 + Unicode
Fonte: slideshare – Andrei Zmievski – Whats happened to Unicode and PHP6 - 2011
Mas e o PHP6?
Fonte: slideshare – Andrei Zmievski – Whats happened to Unicode and PHP6 - 2011
Por que não PHP 5.7 ?• Limpeza do código• Refatorar antigas funções• Novas funcionalidade
Fonte: https://wiki.php.net/rfc/php7_57_roadmap
Por que não PHP 5.7 ?• Limpeza do código• Refatorar antigas funções• Novas funcionalidade• Novo core PHPNG
Fonte: https://wiki.php.net/rfc/php7_57_roadmap
Fonte: https://wiki.php.net/phpng
PHPNG?• PHP Next Generation• Branch criado pela Zend em
Jan/2014• Nenhuma funcionalidade extra• Foco na performance (como?)
Fonte: https://wiki.php.net/phpng
PHPNG?• PHP Next Generation• Branch criado pela Zend em
Jan/2014• Nenhuma funcionalidade extra• Foco na performance (como?)
– Com a possibilidade de prever qual o tipo de valor será retornado, é possível
otimizar a estrutura de dados.(Ver mais: Talk ZendCon-2014)
HashTable• HashTable reduzida de 72 para 56
bytes• Bucket reduzido de 72 to 32 bytes
Fonte: talk ZendCon-2014 at https://wiki.php.net/phpng
1001 Pequenas Melhorias• Nova HashTable API• Otimização na duplicação de Arrays• Contagem de Referências ao invés
de copia-las• Otimização do Serialize()• Etc..
Fonte: talk ZendCon-2014 at https://wiki.php.net/phpng
PHPNG Performance
PHP 5.6 PHPNG
Memory Usage 428 MB
Time 0.29 secFonte: talk ZendCon-2014 at https://wiki.php.net/phpng
PHPNG Performance
PHP 5.6 PHPNG
Memory Usage 428 MB 33 MB
Time 0.29 sec 0.06 secFonte: talk ZendCon-2014 at https://wiki.php.net/phpng
PHP-5.6 PHP-7 HHVM-3.3.0 Diff
ZF1 Hello 1150 1655 961 72%ZF2 Test 269 421 260 62%
Drupal 194 281 261 8%SugarCRM
(login) 132 225 165 36%
Magento 43 57 60 -5%Symfony 2.5
ACME 85 110 92 20%Fonte: talk ZendCon-2014 at https://wiki.php.net/phpng
PHPNG Performance [req / seg]
Wordpress PerformaceTarefa: Wordpress Homepage
• Antes dos PHPNG– 9.4 Bilhões de instruções de CPU
• Com PHPNG
Fonte: https://www.zend.com/en/resources/php-7
Wordpress PerformaceTarefa: Wordpress Homepage
• Antes dos PHPNG– 9.4 Bilhões de instruções de CPU
• Com PHPNG– 2.6 Bilhões de instruções de CPU
72% menos!Fonte: https://www.zend.com/en/resources/php-7
Agosto 2014• Core do PHP recebe o merge do
PHPNG• É aberta a oportunidade de mudar!
Novas Features• Scalar Type Declarations• Return Type Declarations• Combined Comparison Operator (Spaceship)• Null Coalesce Operator• Anonymous Classes• Unicode Codepoint Escape Syntax• Closure call() Method• Group Use Declarations• Session_start() Options• Support for Array Constants in define()
Fonte: https://github.com/tpunt/PHP7-Reference
Scalar type hints• O PHP é conhecido por ser uma
linguagem de tipagem dinâmica.
Scalar type hints
Return Type Declarations• A proposta desse RFC era simples.• Possibilitar a garantia do retorno de
uma função ou método.
Fonte: https://wiki.php.net/rfc/return_types
Return Type Declarations
Fonte: https://wiki.php.net/rfc/return_types
Return Type Declarations
Fonte: https://wiki.php.net/rfc/return_types
Fatal Errormust be of the type array
Return Type Declarations
Fonte: https://wiki.php.net/rfc/return_types
Return Type Declarations
Fonte: https://wiki.php.net/rfc/return_types
Fatal Errormust be of the type int, integer returned
Spaceship Operator <=>
Spaceship Operator <=>
Fonte: https://wiki.php.net/rfc/combined-comparison-operator
• Utilizado principalmente em funções de ordenação
• 3 retornos possíveis– Inteiro positivo • operador da esquerda é maior
– Zero• operadores iguais
– Inteiro negativo• operador da direita é maior
Spaceship Operator <=>
Fonte: https://wiki.php.net/rfc/combined-comparison-operator
Spaceship Operator <=>
Fonte: https://wiki.php.net/rfc/combined-comparison-operator
Spaceship Operator <=>
Fonte: https://wiki.php.net/rfc/combined-comparison-operator
Null Coalesce Operator
Fonte: https://github.com/tpunt/PHP7-Reference#null-coalesce-operator
• Figura antiga em banco de dados• Finalmente temos um operador para
diversos valores nulos
Group Use Declarations
Fonte: https://wiki.php.net/rfc/group_use_declarations
• Possibilidade de realizar uma chamada Use para diversas classes do mesmo grupo.
• Lembrando, o uso é opcional.
Group Use Declarations
Fonte: https://wiki.php.net/rfc/group_use_declarations
Alterações (Atenção)• Uniform Variable Syntax• Changes to list’s behavior• Fixes to Custom Session Handler Return
Values• Deprecation of PHP 4-Style Constructors• Removal of date.timezone Warning• Removal of Alternative PHP Tags• Removal of Multiple Default Blocks in
Switch Statements
Fonte: https://github.com/tpunt/PHP7-Reference
Adeus• ext/mysql• ext/ereg• $obj =& new ClassName;• PHP 4 Constructors• <script language=“PHP”></script>• <% ... %>
Fonte: Slideshare – Cyrille Grandval – Nouveautes PHP 7
Adeus• ext/mysql• ext/ereg• $obj =& new ClassName;• PHP 4 Constructors• <script language=“PHP”></script>• <% ... %>
Fonte: Slideshare – Cyrille Grandval – Nouveautes PHP 7
Incompatibilidades• Adicionadas palavras a lista de reservadas
– Int– Float– Bool– String– True– False– Null– Resourse– Object– Mixed– Numeric
Fonte: Slideshare – Cyrille Grandval – Nouveautes PHP 7
Uniform Variable Syntax• Muda completamente o modo que o PHP
realiza a leitura de variáveis variáveis.
• A leitura passa a ser sempre da esquerda para a direita
Fonte: Slideshare – Cyrille Grandval – Nouveautes PHP 7
Uniform Variable Syntax
Fonte: https://wiki.php.net/rfc/uniform_variable_syntax
Uniform Variable Syntax
Fonte: https://wiki.php.net/rfc/uniform_variable_syntax
... pausa, chega de código.
Resumo PHP7• Novo Core
Resumo PHP7• Novo Core• Novos Operadores
Resumo PHP7• Novo Core• Novos Operadores• Melhor desempenho
Resumo PHP7• Novo Core• Novos Operadores• Melhor desempenho• Preparado para futuras melhorias–Multithread?
Resumo PHP7• Maturidade– Core otimizado– OOP Muito bem implementada– Coerência Sintática– Preocupação com a Comunidade
Notícias• HHVM x PHP7
Notícias• HHVM x PHP7• HHVM vai rodar PHP7?
– http://stackoverflow.com/questions/31883096/will-hhvm-be-able-to-run-php7
– De Acordo com Josh Watzman, podemos esperar algo assim!
Notícias
Fonte: http://devzone.zend.com/6647/introducing-php-7-express/ http://stackoverflow.com/questions/31883096/will-hhvm-be-able-to-run-php7
• HHVM x PHP7• HHVM vai rodar PHP7?
– http://stackoverflow.com/questions/31883096/will-hhvm-be-able-to-run-php7
– De Acordo com Josh Watzman, podemos esperar algo assim!
• PHP 7 Express–O Zend Studio 13 virá com uma
ferramenta para procurar potenciais incompatibilidades
Notícias• Travis-CI– Já é possível acessar a nova versão do
PHP através da build “Nightly”
Fonte: http://docs.travis-ci.com/user/languages/php/
PHPRSGrupo de Usuários PHP do Rio Grande
Procure pelo Grupo PHPRS no Facebook
http://php-rs.org/
Certificação ZCPEDesconto de 25%
Créditos: Cyrille Grandval
https://goo.gl/qX38vJ
Z-RayFerramenta para debug, agora não
mais vinculada ao Zend Server
https://goo.gl/TqKHfJ