A Maioridade do PHP
Daniel Archer - Setembro/2015
The Developers Conference 2015 – Porto Alegre
7
Quem sou eu
Formado 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
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)
Fonte: https://wiki.php.net/phpng
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 sec
Fonte: 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 sec
Fonte: 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 Performace
Tarefa: 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 Performace
Tarefa: 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
must 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
must 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/
PHPRS
Grupo de Usuários PHP do Rio Grande
Procure pelo Grupo PHPRS no Facebook
http://php-rs.org/
Certificação ZCPE
Desconto de 25%
Créditos: Cyrille Grandval
https://goo.gl/qX38vJ
Z-Ray
Ferramenta para debug, agora não
mais vinculada ao Zend Server
https://goo.gl/TqKHfJ
PHP 7 - A Maioridade do PHP

PHP 7 - A Maioridade do PHP

  • 1.
    A Maioridade doPHP Daniel Archer - Setembro/2015 The Developers Conference 2015 – Porto Alegre 7
  • 2.
    Quem sou eu Formadopelo Senac em 2011 Palestrante da PHP Conference Brasil 5 Anos de experiência em PHP Desenvolvedor PHP Sênior na Servicoop Coordenador PHPRS
  • 3.
    Mas e oPHP6? • 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
  • 4.
    Mas e oPHP6? Fonte: slideshare – Andrei Zmievski – Whats happened to Unicode and PHP6 - 2011
  • 5.
    Por que nãoPHP 5.7 ? • Limpeza do código • Refatorar antigas funções • Novas funcionalidade Fonte: https://wiki.php.net/rfc/php7_57_roadmap
  • 6.
    Por que nãoPHP 5.7 ? • Limpeza do código • Refatorar antigas funções • Novas funcionalidade • Novo core PHPNG Fonte: https://wiki.php.net/rfc/php7_57_roadmap
  • 7.
    PHPNG? • PHP NextGeneration • Branch criado pela Zend em Jan/2014 • Nenhuma funcionalidade extra • Foco na performance (como?) Fonte: https://wiki.php.net/phpng
  • 8.
    PHPNG? • PHP NextGeneration • 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) Fonte: https://wiki.php.net/phpng
  • 9.
    HashTable • HashTable reduzidade 72 para 56 bytes • Bucket reduzido de 72 to 32 bytes Fonte: talk ZendCon-2014 at https://wiki.php.net/phpng
  • 10.
    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
  • 11.
    PHPNG Performance PHP 5.6PHPNG Memory Usage 428 MB Time 0.29 sec Fonte: talk ZendCon-2014 at https://wiki.php.net/phpng
  • 12.
    PHPNG Performance PHP 5.6PHPNG Memory Usage 428 MB 33 MB Time 0.29 sec 0.06 sec Fonte: talk ZendCon-2014 at https://wiki.php.net/phpng
  • 13.
    PHP-5.6 PHP-7 HHVM- 3.3.0 Diff ZF1 Hello1150 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]
  • 14.
    Wordpress Performace Tarefa: WordpressHomepage • Antes dos PHPNG – 9.4 Bilhões de instruções de CPU • Com PHPNG Fonte: https://www.zend.com/en/resources/php-7
  • 15.
    Wordpress Performace Tarefa: WordpressHomepage • 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
  • 16.
    Agosto 2014 • Coredo PHP recebe o merge do PHPNG • É aberta a oportunidade de mudar!
  • 18.
    Novas Features • ScalarType 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
  • 19.
    Scalar type hints •O PHP é conhecido por ser uma linguagem de tipagem dinâmica.
  • 20.
  • 21.
    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
  • 22.
    Return Type Declarations Fonte:https://wiki.php.net/rfc/return_types
  • 23.
    Return Type Declarations Fonte:https://wiki.php.net/rfc/return_types must be of the type array
  • 24.
    Return Type Declarations Fonte:https://wiki.php.net/rfc/return_types
  • 25.
    Return Type Declarations Fonte:https://wiki.php.net/rfc/return_types must be of the type int, integer returned
  • 26.
  • 27.
    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
  • 28.
    Spaceship Operator <=> Fonte:https://wiki.php.net/rfc/combined-comparison-operator
  • 29.
    Spaceship Operator <=> Fonte:https://wiki.php.net/rfc/combined-comparison-operator
  • 30.
    Spaceship Operator <=> Fonte:https://wiki.php.net/rfc/combined-comparison-operator
  • 31.
    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
  • 32.
    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.
  • 33.
    Group Use Declarations Fonte:https://wiki.php.net/rfc/group_use_declarations
  • 34.
    Alterações (Atenção) • UniformVariable 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
  • 35.
    Adeus • ext/mysql • ext/ereg •$obj =& new ClassName; • PHP 4 Constructors • <script language=“PHP”></script> • <% ... %> Fonte: Slideshare – Cyrille Grandval – Nouveautes PHP 7
  • 36.
    Adeus • ext/mysql • ext/ereg •$obj =& new ClassName; • PHP 4 Constructors • <script language=“PHP”></script> • <% ... %> Fonte: Slideshare – Cyrille Grandval – Nouveautes PHP 7
  • 37.
    Incompatibilidades • Adicionadas palavrasa lista de reservadas – Int – Float – Bool – String – True – False – Null – Resourse – Object – Mixed – Numeric Fonte: Slideshare – Cyrille Grandval – Nouveautes PHP 7
  • 38.
    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
  • 39.
    Uniform Variable Syntax Fonte:https://wiki.php.net/rfc/uniform_variable_syntax
  • 40.
    Uniform Variable Syntax Fonte:https://wiki.php.net/rfc/uniform_variable_syntax
  • 41.
    ... pausa, chegade código.
  • 42.
  • 43.
    Resumo PHP7 • NovoCore • Novos Operadores
  • 44.
    Resumo PHP7 • NovoCore • Novos Operadores • Melhor desempenho
  • 45.
    Resumo PHP7 • NovoCore • Novos Operadores • Melhor desempenho • Preparado para futuras melhorias – Multithread?
  • 46.
    Resumo PHP7 • Maturidade –Core otimizado – OOP Muito bem implementada – Coerência Sintática – Preocupação com a Comunidade
  • 47.
  • 48.
    Notícias • HHVM xPHP7 • 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!
  • 49.
    Notícias Fonte: http://devzone.zend.com/6647/introducing-php-7-express/ http://stackoverflow.com/questions/31883096/will-hhvm-be-able-to-run-php7 • HHVMx 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
  • 50.
    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/
  • 51.
    PHPRS Grupo de UsuáriosPHP do Rio Grande Procure pelo Grupo PHPRS no Facebook http://php-rs.org/
  • 52.
    Certificação ZCPE Desconto de25% Créditos: Cyrille Grandval https://goo.gl/qX38vJ
  • 53.
    Z-Ray Ferramenta para debug,agora não mais vinculada ao Zend Server https://goo.gl/TqKHfJ