PHP Experience 2016 - [Palestra] Keynote: PHP-7

iMasters
iMastersjornalista, web editor, web writer, tradutora (en-pt/pt-en) at iMasters
PHP 7
Guilherme Blanco
PHP Experience 2016 - [Palestra] Keynote: PHP-7
Guilherme Blanco
http://github.com/guilhermeblanco
@guilhermeblanco
Guilherme Blanco
http://github.com/guilhermeblanco
@guilhermeblanco
http://hhvm.com/blog/9293/lockdown-results-and-hhvm-performance
Agenda
• Mudanças para o usuário
• Mudanças internas
• PHP.NEXT
Mudanças para o usuário
• Quebras de compatibilidade
• Novos operadores
• Erros e exceções
• Indução de tipo escalar (Scalar type hint)
• Declaração de tipo de retorno (Return type hint)
• Classes anônimas (Anonymous classes)
• Palavras-chave semi-reservadas
Quebras de compatibilidade
<% /* ... */ %>
<%= /* ... */ %>
<script language="php">/* ... */</script>
<? /* ... */ ?>
<?= /* ... */ ?>
<?php /* ... */ ?>
• Tags alternativas do PHP
Quebras de compatibilidade
• Construtores do PHP 4
1 class Post {
2 public function post() {
3 echo 'post';
4 }
5 }
$post = new Post();
$post = new DomainPost();
1 namespace Domain {
2 class Post {
3 public function post() {
4 echo 'post';
5 }
6 }
7 }
Quebras de compatibilidade
• Mudanças de sintaxe (Uniform variable syntax)
• Novas combinações de operadores
$foo()['bar']()
[$obj1, $obj2][0]->prop
$foo->bar()::baz()
$foo->bar()()
(function () {})()
Quebras de compatibilidade
• Mudanças de sintaxe (Uniform variable syntax)
• Acesso indireto à variáveis, propriedades e métodos
Expressão Interpretação no PHP 5 Interpretação no PHP 7
$$foo['bar']['baz'] ${$foo['bar']['baz']} ($$foo)['bar']['baz']
$foo->$bar['baz'] $foo->{$bar['baz']} ($foo->$bar)['baz']
$foo->$bar['baz']() $foo->{$bar['baz']}() ($foo->$bar)['baz']()
Foo::$bar['baz']() Foo::{$bar['baz']}() (Foo::$bar)['baz']()
Quebras de compatibilidade
• Server APIs removidas:

aolserver, apache,
apache_hooks, apache2filter,
caudium, continuity, isapi, milter,
nsapi, phttpd, pi3web, roxen,
thttpd, tux, webjames
• Extensões depreciadas (PECL): 

ereg, mssql, mysql, sybase_ct
Novos operadores
• Null coalesce operator (??)
• Spaceship operator (<=>)
• Group use
• Unicode escape syntax (u)
Novos operadores
• Null coalesce operator (??)
$page = $_GET['page'] ?: 1;
if (isset($_GET['page'])) {
$page = $_GET['page'];
} else {
$page = 1;
}
$page = isset($_GET['page'])
? $_GET['page']
: 1
;
$page = $_GET['page'] ?? 1;
Novos operadores
• Operador de comparação combinado (Spaceship operator) (<=>)
1 // Integers
2 echo 1 <=> 1; // 0
3 echo 2 <=> 1; // 1
4 echo 1 <=> 2; // -1
5
6 // Floats
7 echo 1.5 <=> 1.5; // 0
8 echo 2.5 <=> 1.5; // 1
9 echo 1.5 <=> 2.5; // -1
10
11 // Strings
12 echo 'a' <=> 'a'; // 0
13 echo 'z' <=> 'a'; // 1
14 echo 'a' <=> 'z'; // -1
15
16 echo 'zz' <=> 'aa'; // 1
17 echo 'a' <=> 'aa'; // -1
Novos operadores
• Group use
use EblockDomainDirectoryEntity{
Consigner,
Location as ConsignerLocation,
User
};
use EblockDomainDirectory{
DTO{
ConsignerUpdate as UpdateConsigner
},
Entity{
Consigner,
Location,
User
}
};
Novos operadores
• Unicode escape syntax (u)
❤ (0x2764)
// <3 no PHP 5
$char = html_entity_decode('&#x10084', 0, 'UTF-8');
$char = mb_convert_encoding('&#x10084', 'UTF-8', 'HTML-ENTITIES');
$char = json_decode('"u2764"');
// <3 no PHP 7
$char = "u2764";
Erros e exceções
• Usuário pode capturar qualquer chamada que possa gerar erros fatais
• A maioria dos error E_RECOVERABLE viraram Exceptions
• Erros E_STRICT foram re-classificados como E_WARN e E_NOTICE
• Erros fatais são ou herdam a classe "Error"
• Erros de análise sintática geram "ParseError"
• Ambos "Error" e "Exception" implementam a interface "Throwable"
Erros e exceções
Erros e exceções
1 echo 'PHP ' . phpversion() . PHP_EOL;
2
3 try {
4 $foo = new foo();
5 } catch (Exception $e) {
6 echo 'I am an exception: ' . $e->getMessage() . PHP_EOL;
7 } catch (Error $e) {
8 echo 'I am an error: ' . $e->getMessage() . PHP_EOL;
9 } catch (Throwable $t) {
10 echo 'I am throwable: ' . $t->getMessage() . PHP_EOL;
11 }
12
13 // PHP 5.6.19
14 // Fatal error: Class 'foo' not found in
15 // Documents/PHP7/throwable.php on line 5
16
17 // PHP 7.0.4
18 // I am an error: Class 'foo' not found
Indução de tipo escalar
• Funciona de duas formas distintas:
• Weak mode (Coercivo)
• Strict (Forte)
declare(strict_types=1);
Indução de tipo escalar
Tipo declarado int float string bool object
int yes yes* yes† yes no
float yes yes yes† yes no
string yes yes yes yes yes‡
bool yes yes yes yes no
* Somente pontos flutuantes não-NaN e entre PHP_INT_MIN e PHP_INT_MAX serão aceitos.
† Se for uma string numérica
‡ Somente se o objeto tiver o método __toString()
function setEnabled(bool $enabled) { /* ... */ }
Indução de tipo escalar
1 declare(strict_types=1);
2
3 function welcome(string $name) {
4 echo 'Welcome to the show, ' . $name;
5 }
6
7 welcome('Guilherme');
8 // Welcome to the show, Guilherme
9
10 welcome(42);
11 // TypeError: Argument 1 passed to welcome()
12 // must be of the type string, integer given
Declaração de tipo de retorno
function getCreator(): UserInterface {
return $this->getPost()->getAuthor();
}
function getAuthor(): UserInterface {
return 'Guilherme Blanco';
}
getAuthor();
// TypeError: Return value of getAuthor() must be
// an instance of UserInterface, string returned
Classes anônimas
// Pre PHP 7
class EchoLogger implements LoggerInterface {
public function log($message) {
echo $message;
}
}
$application->setLogger(new Logger());
// PHP 7, seu lindo! <3
$application->setLogger(new class () implements LoggerInterface {
public function log(string $message) {
echo $message;
}
});
Palavras-chave semi-reservadas
• abstract
• and
• array
• as
• break
• callable
• case
• catch
• class*
• clone
• const
• continue
• declare
• default
• die
• do
• global
• goto
• if
• implements
• include
• include_once
• instanceof
• insteadof
• interface
• list
• namespace
• new
• or
• parent
• print
• private
• protected
• public
• require
• require_once
• return
• self
• static
• switch
• throw
• trait
• try
• use
• var
• while
• xor
• yield
• echo
• else
• elseif
• enddeclare
• endfor
• endforeach
• endif
• endswitch
• endwhile
• exit
• extends
• final
• finally
• for
• foreach
• function
Palavras-chave semi-reservadas
1 namespace HTTP
2 {
3 class StatusCode
4 {
5 const CONTINUE = 100;
6 const SWITCHING_PROTOCOLS = 101;
7 // ...
8 }
9 }
Palavras-chave semi-reservadas
1 $queryBuilder = $repository->createQueryBuilder('e');
2
3 $queryBuilder
4 ->where()
5 ->and()
6 ->field('e.projeto')
7 ->not()
8 ->like('%secreto%')
9 ->end()
10 ->field('e.prioridade')
11 ->gt(9)
12 ->end()
13 ->end()
14 ->or()
15 ->field('e.codigo')
16 ->in([4, 5, 6])
17 ->end()
18 ->end()
19 ->end()
20 ;
Mudanças internas
• Árvore de sintaxe abstrata (Abstract Syntax Tree)
• Suporte completo a 64 bits
• Large File Support (LFS)
• Strings maiores que 231
• Suporte a inteiros de 64 bits
• Novo gerenciamento de memória
• ZVALs são alocados na stack
• refcount mais preciso
• Nova implementação de segurança sobre threads
• Thread safety no PHP 5 implicava numa penalização de performance em ~20%
• Otimização de estruturas de dados
Árvore de sintaxe abstrata
<?php
$a = 42;
$b = 24;
echo $a + $b;
<?php T_OPEN_TAG

$a T_VARIABLE

= T_EQUALS

42 T_LNUMBER

; T_SEMICOLON

$b T_VARIABLE

= T_EQUALS

24 T_LNUMBER

; T_SEMICOLON

echo T_ECHO

$a T_VARIABLE

+ T_PLUS

$b T_VARIABLE

; T_SEMICOLON
lex
ASSIGN $a 42

ASSIGN $b 24

ADD $a $b ~0

ECHO ~0

RETURN 1
parse + compile
Árvore de sintaxe abstrata
<?php
$a = 42;
$b = 24;
echo $a + $b;
<?php T_OPEN_TAG

$a T_VARIABLE

= T_EQUALS

42 T_LNUMBER

; T_SEMICOLON

$b T_VARIABLE

= T_EQUALS

24 T_LNUMBER

; T_SEMICOLON

echo T_ECHO

$a T_VARIABLE

+ T_PLUS

$b T_VARIABLE

; T_SEMICOLON
lex
stmts
assign assign echo
42 24 +
$a $b $a $b
var var
parse
ASSIGN $a 42

ASSIGN $b 24

ADD $a $b ~0

ECHO ~0

RETURN 1
compile
Otimização de estruturas de dados
• ~20% do tempo gasto no PHP 5 era referente à alocação de memória
• No PHP 7, foi reduzido o número de alocações
• No PHP 7, foi reduzido o consumo de memória
• No PHP 7, foi reduzido o número de indicações
• O motor de execução agora utiliza stack push e gerencia argumentos
• Chamada pra funções foram drasticamente refatoradas
• Variáveis no PHP 7 são cacheadas de forma mais eficiente
• String são refcounted
Otimização de estruturas de dados
• ZVAL no PHP 5
1 typedef union _zvalue_value {
2 long lval;
3 double dval;
4 struct {
5 char *val;
6 int len;
7 } str;
8 HashTable *ht;
9 zend_object_value obj;
10 zend_ast *ast;
11 } zvalue_value;
1 struct _zval_struct {
2 zvalue_value value;
4 zend_uint refcount__gc;
5 zend_uchar type;
6 zend_uchar is_ref__gc;
7 } zval;
ZVAL no PHP 5
value

ZVAL
ty
Crédito: Nikita Popov
ZVAL no PHP 5
value (simple):

null, bool, int, float
ZVAL
ty
Crédito: Nikita Popov
ZVAL no PHP 5
value (complex):

ZVAL
ty
complex data structure:

string, array, object
Crédito: Nikita Popov
ZVAL no PHP 5
1 $a = [];
zval *$a value (complex):

ZVAL
ty
complex data structure:

string, array, object
refcount = 1
Crédito: Nikita Popov
ZVAL no PHP 5
zval *$a
1 $a = [];
2 $b = $a;
value (complex):

ZVAL
ty
complex data structure:

string, array, object
refcount = 1
Crédito: Nikita Popov
ZVAL no PHP 5
zval *$a
1 $a = [];
2 $b = $a;
value (complex):

ZVAL
ty
complex data structure:

string, array, object
refcount = 2
zval *$b
Crédito: Nikita Popov
1 typedef union _zend_value {
2 zend_long lval;
3 double dval;
4 zend_refcounted *counted;
5 zend_string *str;
6 zend_array *arr;
7 zend_object *obj;
8 zend_resource *res;
9 zend_reference *ref;
10 zend_ast_ref *ast;
11 zval *zv;
12 void *ptr;
13 zend_class_entry *ce;
14 zend_function *func;
15 struct {
16 uint32_t w1;
17 uint32_t w2;
18 } ww;
19 } zend_value;
1 struct _zval_struct {
2 zend_value value;
3 union {
4 struct {
5 ZEND_ENDIAN_LOHI_4(
6 zend_uchar type,
7 zend_uchar type_flags,
8 zend_uchar const_flags,
9 zend_uchar reserved)
10 } v;
11 uint32_t type_info;
12 } u1;
13 union {
14 uint32_t var_flags;
15 uint32_t next;
16 uint32_t cache_slot;
17 uint32_t lineno;
18 uint32_t num_args;
19 uint32_t fe_pos;
20 uint32_t fe_iter_idx;
21 uint32_t access_flags;
22 } u2;
23 } zval;
ZVAL no PHP 7
ZVAL no PHP 7
zval *$a
1 $a = [];
2 $b = $a;
value (complex):

ZVAL
ty
zval *$b
complex data structure:

string, array, object
refcount = 2
Crédito: Nikita Popov
ZVAL no PHP 7
zval *$a
1 $a = [];
2 $b = $a;
zval *$b
complex data structure:

string, array, object
refcount = 2
ZVAL
value (complex):

type_info
Crédito: Nikita Popov
ZVAL no PHP 7
$a
1 $a = [];
2 $b = $a;
$b
complex data structure:

string, array, object
refcount = 2
value (complex):

type_info
value (complex):

type_info
Crédito: Nikita Popov
PHP 5 vs. PHP 7 ZVAL
zval *
value (simple):

null, bool, int, float
tyrefcount = 1
1 alocação de memória
1 nível de indireção
40 bytes
value (simple):

null, bool, int, float
type_info
sem alocações de memória
sem indireções
16 bytes
PHP 5 vs. PHP 7 ZVAL
zval *
complex data structure:

string, array, object
value (complex):

tyrefcount = 1
2 alocações de memória
2 níveis de indireção
40 bytes
complex data structure:

string, array, object
refcount = 1
value (complex):

type_info
1 alocação de memória
1 nível de indireção
24 bytes
PHP 5 vs. PHP 7 Objetos
zval
object store bucket
object real
tabela de propriedades
valor da propriedade
zval
objeto real
+
tabela de propriedades

(incluindo valores)
PHP 5 PHP 7
Alocações 2 + 1 / propriedade 1 + 0 / propriedade
Tamanho 96 + 40 / propriedade 48 + 16 / propriedade
Indireções 4 1
PHP.NEXT
• Parâmetros nomeados (Named parameters)
• Visibilidade de classes (Class Visibility)
• Tipagem de propriedades (Typed properties)
• Anotações (Annotations)
• Coleções (Collections)
• Estruturas genéricas (Generics)
Perguntas?
Thanks! =)
http://github.com/guilhermeblanco
@guilhermeblanco
1 of 49

Recommended

PHP 7 by
PHP 7PHP 7
PHP 7Guilherme Blanco
2.4K views49 slides
PHP Experience 2016 - [Palestra] Rumo à Certificação PHP by
PHP Experience 2016 - [Palestra] Rumo à Certificação PHPPHP Experience 2016 - [Palestra] Rumo à Certificação PHP
PHP Experience 2016 - [Palestra] Rumo à Certificação PHPiMasters
1.1K views59 slides
Doctrine2 Seminário PHP by
Doctrine2 Seminário PHPDoctrine2 Seminário PHP
Doctrine2 Seminário PHPGuilherme Blanco
4.5K views80 slides
Dependency injection by
Dependency injectionDependency injection
Dependency injectionGuilherme Blanco
2.1K views84 slides
Object Calisthenics: relaxe e escreva códigos simples by
Object Calisthenics: relaxe e escreva códigos simplesObject Calisthenics: relaxe e escreva códigos simples
Object Calisthenics: relaxe e escreva códigos simplesOtávio Calaça Xavier
1.1K views55 slides
Proxy, Man-In-The-Middle e testes by
Proxy, Man-In-The-Middle e testesProxy, Man-In-The-Middle e testes
Proxy, Man-In-The-Middle e testesStanislaw Pusep
898 views20 slides

More Related Content

What's hot

Minicurso Shell Script by
Minicurso Shell ScriptMinicurso Shell Script
Minicurso Shell ScriptLuís Eduardo
1.1K views68 slides
PHP GERAL by
PHP GERALPHP GERAL
PHP GERALLucas Batistussi
3.1K views30 slides
PHP Jedi - Boas Práticas e Alta Performance by
PHP Jedi - Boas Práticas e Alta PerformancePHP Jedi - Boas Práticas e Alta Performance
PHP Jedi - Boas Práticas e Alta PerformanceFelipe Ribeiro
7.8K views96 slides
Php by
PhpPhp
PhpPaulo Bucho
2.2K views102 slides
Shell script by
Shell scriptShell script
Shell scriptDenis Costa
889 views53 slides
Introducao ao Shell Script by
Introducao ao Shell ScriptIntroducao ao Shell Script
Introducao ao Shell ScriptHugo Maia Vieira
2K views16 slides

What's hot(20)

Minicurso Shell Script by Luís Eduardo
Minicurso Shell ScriptMinicurso Shell Script
Minicurso Shell Script
Luís Eduardo1.1K views
PHP Jedi - Boas Práticas e Alta Performance by Felipe Ribeiro
PHP Jedi - Boas Práticas e Alta PerformancePHP Jedi - Boas Práticas e Alta Performance
PHP Jedi - Boas Práticas e Alta Performance
Felipe Ribeiro7.8K views
Linguagem PHP by Bruno Cunha
Linguagem PHPLinguagem PHP
Linguagem PHP
Bruno Cunha2.4K views
PHP na Tela Escura: Aplicações Poderosas em Linha de Comando by Rafael Jaques
PHP na Tela Escura: Aplicações Poderosas em Linha de ComandoPHP na Tela Escura: Aplicações Poderosas em Linha de Comando
PHP na Tela Escura: Aplicações Poderosas em Linha de Comando
Rafael Jaques8.9K views
Introdução ao Shell Script (versão estendida) by Hugo Maia Vieira
Introdução ao Shell Script (versão estendida)Introdução ao Shell Script (versão estendida)
Introdução ao Shell Script (versão estendida)
Hugo Maia Vieira746 views
Perl Moderno, dia3 by garux
Perl Moderno, dia3Perl Moderno, dia3
Perl Moderno, dia3
garux979 views
(Portuguese) Java EE Poliglota by Phil Calçado
(Portuguese) Java EE Poliglota(Portuguese) Java EE Poliglota
(Portuguese) Java EE Poliglota
Phil Calçado750 views
Criando APIs usando o micro-framework Respect by Ivan Rosolen
Criando APIs usando o micro-framework RespectCriando APIs usando o micro-framework Respect
Criando APIs usando o micro-framework Respect
Ivan Rosolen9.8K views

Viewers also liked

PHP Experience 2016 - [Palestra] Autenticação em APIs by
PHP Experience 2016 - [Palestra] Autenticação em APIsPHP Experience 2016 - [Palestra] Autenticação em APIs
PHP Experience 2016 - [Palestra] Autenticação em APIsiMasters
1.3K views38 slides
PHP Experience 2016 - [Palestra] Melhorando a comunicação da API através de DSL by
PHP Experience 2016 - [Palestra] Melhorando a comunicação da API através de DSLPHP Experience 2016 - [Palestra] Melhorando a comunicação da API através de DSL
PHP Experience 2016 - [Palestra] Melhorando a comunicação da API através de DSLiMasters
1K views80 slides
PHP Experience 2016 - [Workshop] Deploy escalável na Amazon AWS by
PHP Experience 2016 - [Workshop] Deploy escalável na Amazon AWSPHP Experience 2016 - [Workshop] Deploy escalável na Amazon AWS
PHP Experience 2016 - [Workshop] Deploy escalável na Amazon AWSiMasters
951 views49 slides
Waw - Gas by
Waw - GasWaw - Gas
Waw - Gasimpactaeventos
466 views41 slides
PHP Experience 2016 - [Workshop] APIs bem desenhadas como base para integrações by
PHP Experience 2016 - [Workshop] APIs bem desenhadas como base para integraçõesPHP Experience 2016 - [Workshop] APIs bem desenhadas como base para integrações
PHP Experience 2016 - [Workshop] APIs bem desenhadas como base para integraçõesiMasters
1.2K views126 slides
PHP Experience 2016 - [Palestra] Json Web Token (JWT) by
PHP Experience 2016 - [Palestra] Json Web Token (JWT)PHP Experience 2016 - [Palestra] Json Web Token (JWT)
PHP Experience 2016 - [Palestra] Json Web Token (JWT)iMasters
2.1K views33 slides

Viewers also liked(9)

PHP Experience 2016 - [Palestra] Autenticação em APIs by iMasters
PHP Experience 2016 - [Palestra] Autenticação em APIsPHP Experience 2016 - [Palestra] Autenticação em APIs
PHP Experience 2016 - [Palestra] Autenticação em APIs
iMasters1.3K views
PHP Experience 2016 - [Palestra] Melhorando a comunicação da API através de DSL by iMasters
PHP Experience 2016 - [Palestra] Melhorando a comunicação da API através de DSLPHP Experience 2016 - [Palestra] Melhorando a comunicação da API através de DSL
PHP Experience 2016 - [Palestra] Melhorando a comunicação da API através de DSL
iMasters1K views
PHP Experience 2016 - [Workshop] Deploy escalável na Amazon AWS by iMasters
PHP Experience 2016 - [Workshop] Deploy escalável na Amazon AWSPHP Experience 2016 - [Workshop] Deploy escalável na Amazon AWS
PHP Experience 2016 - [Workshop] Deploy escalável na Amazon AWS
iMasters951 views
PHP Experience 2016 - [Workshop] APIs bem desenhadas como base para integrações by iMasters
PHP Experience 2016 - [Workshop] APIs bem desenhadas como base para integraçõesPHP Experience 2016 - [Workshop] APIs bem desenhadas como base para integrações
PHP Experience 2016 - [Workshop] APIs bem desenhadas como base para integrações
iMasters1.2K views
PHP Experience 2016 - [Palestra] Json Web Token (JWT) by iMasters
PHP Experience 2016 - [Palestra] Json Web Token (JWT)PHP Experience 2016 - [Palestra] Json Web Token (JWT)
PHP Experience 2016 - [Palestra] Json Web Token (JWT)
iMasters2.1K views
PHP Experience 2016 - [Workshop] Agile: Test Driven Development by iMasters
PHP Experience 2016 - [Workshop] Agile: Test Driven DevelopmentPHP Experience 2016 - [Workshop] Agile: Test Driven Development
PHP Experience 2016 - [Workshop] Agile: Test Driven Development
iMasters1K views
PHP Experience 2016 - [Workshop] Elastic Search: Turbinando sua aplicação PHP by iMasters
PHP Experience 2016 - [Workshop] Elastic Search: Turbinando sua aplicação PHPPHP Experience 2016 - [Workshop] Elastic Search: Turbinando sua aplicação PHP
PHP Experience 2016 - [Workshop] Elastic Search: Turbinando sua aplicação PHP
iMasters1.3K views
What I learnt: Elastic search & Kibana : introduction, installtion & configur... by Rahul K Chauhan
What I learnt: Elastic search & Kibana : introduction, installtion & configur...What I learnt: Elastic search & Kibana : introduction, installtion & configur...
What I learnt: Elastic search & Kibana : introduction, installtion & configur...
Rahul K Chauhan1.1K views

Similar to PHP Experience 2016 - [Palestra] Keynote: PHP-7

TDC 2016 - PHP7 by
TDC 2016 - PHP7TDC 2016 - PHP7
TDC 2016 - PHP7Marcelo Aymone
301 views40 slides
Java 9, 10 e ... 11 by
Java 9, 10 e ... 11Java 9, 10 e ... 11
Java 9, 10 e ... 11Rodrigo Cândido da Silva
705 views40 slides
Migrando para o PHP 5 by
Migrando para o PHP 5Migrando para o PHP 5
Migrando para o PHP 5ECRAYON Tecnologia Criativa
687 views30 slides
Preparando-se para a prova da Certificação Zend PHP 5.3 by
Preparando-se para a prova da Certificação Zend PHP 5.3Preparando-se para a prova da Certificação Zend PHP 5.3
Preparando-se para a prova da Certificação Zend PHP 5.3klaussilveira
1.2K views34 slides
Zephir by
ZephirZephir
ZephirLuiz Gavinho
910 views17 slides
SIMCIT 2013 - Mini-curso PHP by
SIMCIT 2013 - Mini-curso PHPSIMCIT 2013 - Mini-curso PHP
SIMCIT 2013 - Mini-curso PHPJonata Weber
611 views73 slides

Similar to PHP Experience 2016 - [Palestra] Keynote: PHP-7(20)

Preparando-se para a prova da Certificação Zend PHP 5.3 by klaussilveira
Preparando-se para a prova da Certificação Zend PHP 5.3Preparando-se para a prova da Certificação Zend PHP 5.3
Preparando-se para a prova da Certificação Zend PHP 5.3
klaussilveira1.2K views
SIMCIT 2013 - Mini-curso PHP by Jonata Weber
SIMCIT 2013 - Mini-curso PHPSIMCIT 2013 - Mini-curso PHP
SIMCIT 2013 - Mini-curso PHP
Jonata Weber611 views
55 New Things in Java 7 - Brazil by Stephen Chin
55 New Things in Java 7 - Brazil55 New Things in Java 7 - Brazil
55 New Things in Java 7 - Brazil
Stephen Chin2.3K views
Javascript para CSharpers 4 - POO by Wesley Lemos
Javascript para CSharpers 4 - POOJavascript para CSharpers 4 - POO
Javascript para CSharpers 4 - POO
Wesley Lemos677 views
Palestra Desenvolvimento Ágil para Web com ROR UVA by Thiago Cifani
Palestra Desenvolvimento Ágil para Web com ROR UVAPalestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVA
Thiago Cifani519 views
Relato Sobre a Migração de uma Aplicação Legada para Rails by Cássio Marques
Relato Sobre a Migração de uma Aplicação Legada para RailsRelato Sobre a Migração de uma Aplicação Legada para Rails
Relato Sobre a Migração de uma Aplicação Legada para Rails
Cássio Marques1.2K views
(A06) LabMM3 - JavaScript by Carlos Santos
(A06) LabMM3 - JavaScript(A06) LabMM3 - JavaScript
(A06) LabMM3 - JavaScript
Carlos Santos546 views

More from iMasters

O que você precisa saber para modelar bancos de dados NoSQL - Dani Monteiro by
O que você precisa saber para modelar bancos de dados NoSQL - Dani MonteiroO que você precisa saber para modelar bancos de dados NoSQL - Dani Monteiro
O que você precisa saber para modelar bancos de dados NoSQL - Dani MonteiroiMasters
1.4K views40 slides
Postgres: wanted, beloved or dreaded? - Fabio Telles by
Postgres: wanted, beloved or dreaded? - Fabio TellesPostgres: wanted, beloved or dreaded? - Fabio Telles
Postgres: wanted, beloved or dreaded? - Fabio TellesiMasters
603 views51 slides
Por que minha query esta lenta? - Suellen Moraes by
Por que minha query esta lenta? - Suellen MoraesPor que minha query esta lenta? - Suellen Moraes
Por que minha query esta lenta? - Suellen MoraesiMasters
370 views12 slides
Relato das trincheiras: o dia a dia de uma consultoria de banco de dados - Ig... by
Relato das trincheiras: o dia a dia de uma consultoria de banco de dados - Ig...Relato das trincheiras: o dia a dia de uma consultoria de banco de dados - Ig...
Relato das trincheiras: o dia a dia de uma consultoria de banco de dados - Ig...iMasters
298 views9 slides
ORMs heróis ou vilões dentro da arquitetura de dados? - Otávio gonçalves by
ORMs heróis ou vilões dentro da arquitetura de dados? - Otávio gonçalvesORMs heróis ou vilões dentro da arquitetura de dados? - Otávio gonçalves
ORMs heróis ou vilões dentro da arquitetura de dados? - Otávio gonçalvesiMasters
324 views31 slides
SQL e NoSQL trabalhando juntos: uma comparação para obter o melhor de ambos -... by
SQL e NoSQL trabalhando juntos: uma comparação para obter o melhor de ambos -...SQL e NoSQL trabalhando juntos: uma comparação para obter o melhor de ambos -...
SQL e NoSQL trabalhando juntos: uma comparação para obter o melhor de ambos -...iMasters
1.7K views52 slides

More from iMasters(20)

O que você precisa saber para modelar bancos de dados NoSQL - Dani Monteiro by iMasters
O que você precisa saber para modelar bancos de dados NoSQL - Dani MonteiroO que você precisa saber para modelar bancos de dados NoSQL - Dani Monteiro
O que você precisa saber para modelar bancos de dados NoSQL - Dani Monteiro
iMasters1.4K views
Postgres: wanted, beloved or dreaded? - Fabio Telles by iMasters
Postgres: wanted, beloved or dreaded? - Fabio TellesPostgres: wanted, beloved or dreaded? - Fabio Telles
Postgres: wanted, beloved or dreaded? - Fabio Telles
iMasters603 views
Por que minha query esta lenta? - Suellen Moraes by iMasters
Por que minha query esta lenta? - Suellen MoraesPor que minha query esta lenta? - Suellen Moraes
Por que minha query esta lenta? - Suellen Moraes
iMasters370 views
Relato das trincheiras: o dia a dia de uma consultoria de banco de dados - Ig... by iMasters
Relato das trincheiras: o dia a dia de uma consultoria de banco de dados - Ig...Relato das trincheiras: o dia a dia de uma consultoria de banco de dados - Ig...
Relato das trincheiras: o dia a dia de uma consultoria de banco de dados - Ig...
iMasters298 views
ORMs heróis ou vilões dentro da arquitetura de dados? - Otávio gonçalves by iMasters
ORMs heróis ou vilões dentro da arquitetura de dados? - Otávio gonçalvesORMs heróis ou vilões dentro da arquitetura de dados? - Otávio gonçalves
ORMs heróis ou vilões dentro da arquitetura de dados? - Otávio gonçalves
iMasters324 views
SQL e NoSQL trabalhando juntos: uma comparação para obter o melhor de ambos -... by iMasters
SQL e NoSQL trabalhando juntos: uma comparação para obter o melhor de ambos -...SQL e NoSQL trabalhando juntos: uma comparação para obter o melhor de ambos -...
SQL e NoSQL trabalhando juntos: uma comparação para obter o melhor de ambos -...
iMasters1.7K views
Arquitetando seus dados na prática para a LGPD - Alessandra Martins by iMasters
Arquitetando seus dados na prática para a LGPD - Alessandra MartinsArquitetando seus dados na prática para a LGPD - Alessandra Martins
Arquitetando seus dados na prática para a LGPD - Alessandra Martins
iMasters3.3K views
O papel do DBA no mundo de ciência de dados e machine learning - Mauro Pichil... by iMasters
O papel do DBA no mundo de ciência de dados e machine learning - Mauro Pichil...O papel do DBA no mundo de ciência de dados e machine learning - Mauro Pichil...
O papel do DBA no mundo de ciência de dados e machine learning - Mauro Pichil...
iMasters287 views
Desenvolvimento Mobile Híbrido, Nativo ou Web: Quando usá-los - Juliana Chahoud by iMasters
Desenvolvimento Mobile Híbrido, Nativo ou Web: Quando usá-los - Juliana ChahoudDesenvolvimento Mobile Híbrido, Nativo ou Web: Quando usá-los - Juliana Chahoud
Desenvolvimento Mobile Híbrido, Nativo ou Web: Quando usá-los - Juliana Chahoud
iMasters950 views
Use MDD e faça as máquinas trabalharem para você - Andreza Leite by iMasters
 Use MDD e faça as máquinas trabalharem para você - Andreza Leite Use MDD e faça as máquinas trabalharem para você - Andreza Leite
Use MDD e faça as máquinas trabalharem para você - Andreza Leite
iMasters682 views
Entendendo os porquês do seu servidor - Talita Bernardes by iMasters
Entendendo os porquês do seu servidor - Talita BernardesEntendendo os porquês do seu servidor - Talita Bernardes
Entendendo os porquês do seu servidor - Talita Bernardes
iMasters544 views
Backend performático além do "coloca mais máquina lá" - Diana Arnos by iMasters
Backend performático além do "coloca mais máquina lá" - Diana ArnosBackend performático além do "coloca mais máquina lá" - Diana Arnos
Backend performático além do "coloca mais máquina lá" - Diana Arnos
iMasters477 views
Dicas para uma maior performance em APIs REST - Renato Groffe by iMasters
Dicas para uma maior performance em APIs REST - Renato GroffeDicas para uma maior performance em APIs REST - Renato Groffe
Dicas para uma maior performance em APIs REST - Renato Groffe
iMasters595 views
7 dicas de desempenho que equivalem por 21 - Danielle Monteiro by iMasters
7 dicas de desempenho que equivalem por 21 - Danielle Monteiro7 dicas de desempenho que equivalem por 21 - Danielle Monteiro
7 dicas de desempenho que equivalem por 21 - Danielle Monteiro
iMasters475 views
Quem se importa com acessibilidade Web? - Mauricio Maujor by iMasters
Quem se importa com acessibilidade Web? - Mauricio MaujorQuem se importa com acessibilidade Web? - Mauricio Maujor
Quem se importa com acessibilidade Web? - Mauricio Maujor
iMasters480 views
Service Mesh com Istio e Kubernetes - Wellington Figueira da Silva by iMasters
Service Mesh com Istio e Kubernetes - Wellington Figueira da SilvaService Mesh com Istio e Kubernetes - Wellington Figueira da Silva
Service Mesh com Istio e Kubernetes - Wellington Figueira da Silva
iMasters604 views
Erros: Como eles vivem, se alimentam e se reproduzem? - Augusto Pascutti by iMasters
Erros: Como eles vivem, se alimentam e se reproduzem? - Augusto PascuttiErros: Como eles vivem, se alimentam e se reproduzem? - Augusto Pascutti
Erros: Como eles vivem, se alimentam e se reproduzem? - Augusto Pascutti
iMasters559 views
Elasticidade e engenharia de banco de dados para alta performance - Rubens G... by iMasters
Elasticidade e engenharia de banco de dados para alta performance  - Rubens G...Elasticidade e engenharia de banco de dados para alta performance  - Rubens G...
Elasticidade e engenharia de banco de dados para alta performance - Rubens G...
iMasters569 views
Construindo aplicações mais confiantes - Carolina Karklis by iMasters
Construindo aplicações mais confiantes - Carolina KarklisConstruindo aplicações mais confiantes - Carolina Karklis
Construindo aplicações mais confiantes - Carolina Karklis
iMasters477 views
Monitoramento de Aplicações - Felipe Regalgo by iMasters
Monitoramento de Aplicações - Felipe RegalgoMonitoramento de Aplicações - Felipe Regalgo
Monitoramento de Aplicações - Felipe Regalgo
iMasters709 views

Recently uploaded

CONSTRUA UM TEXTO ARGUMENTATIVO que explique: por que os materiais cerâmicos ... by
CONSTRUA UM TEXTO ARGUMENTATIVO que explique: por que os materiais cerâmicos ...CONSTRUA UM TEXTO ARGUMENTATIVO que explique: por que os materiais cerâmicos ...
CONSTRUA UM TEXTO ARGUMENTATIVO que explique: por que os materiais cerâmicos ...azulassessoriaacadem3
35 views4 slides
6- Sabendo que o caso do paciente 3 está sendo causado por uma condução elétr... by
6- Sabendo que o caso do paciente 3 está sendo causado por uma condução elétr...6- Sabendo que o caso do paciente 3 está sendo causado por uma condução elétr...
6- Sabendo que o caso do paciente 3 está sendo causado por uma condução elétr...azulassessoriaacadem3
284 views4 slides
Texto: Ezequiel 1:1 – Bíblia ARA Aconteceu no trigésimo ano, no quinto dia do... by
Texto: Ezequiel 1:1 – Bíblia ARA Aconteceu no trigésimo ano, no quinto dia do...Texto: Ezequiel 1:1 – Bíblia ARA Aconteceu no trigésimo ano, no quinto dia do...
Texto: Ezequiel 1:1 – Bíblia ARA Aconteceu no trigésimo ano, no quinto dia do...azulassessoriaacadem3
62 views4 slides
Passado uma semana após o parto, Beatriz marcou uma consulta médica para seu ... by
Passado uma semana após o parto, Beatriz marcou uma consulta médica para seu ...Passado uma semana após o parto, Beatriz marcou uma consulta médica para seu ...
Passado uma semana após o parto, Beatriz marcou uma consulta médica para seu ...azulassessoriaacadem3
35 views4 slides
sorteados Livre Concorrência 2024.pdf by
sorteados Livre Concorrência 2024.pdfsorteados Livre Concorrência 2024.pdf
sorteados Livre Concorrência 2024.pdfJornal do Commercio
2.3K views3 slides
ATIVIDADE PROPOSTA Considerando o exposto acima, elabore um texto dissertat... by
ATIVIDADE PROPOSTA   Considerando o exposto acima, elabore um texto dissertat...ATIVIDADE PROPOSTA   Considerando o exposto acima, elabore um texto dissertat...
ATIVIDADE PROPOSTA Considerando o exposto acima, elabore um texto dissertat...azulassessoriaacadem3
30 views2 slides

Recently uploaded(20)

CONSTRUA UM TEXTO ARGUMENTATIVO que explique: por que os materiais cerâmicos ... by azulassessoriaacadem3
CONSTRUA UM TEXTO ARGUMENTATIVO que explique: por que os materiais cerâmicos ...CONSTRUA UM TEXTO ARGUMENTATIVO que explique: por que os materiais cerâmicos ...
CONSTRUA UM TEXTO ARGUMENTATIVO que explique: por que os materiais cerâmicos ...
6- Sabendo que o caso do paciente 3 está sendo causado por uma condução elétr... by azulassessoriaacadem3
6- Sabendo que o caso do paciente 3 está sendo causado por uma condução elétr...6- Sabendo que o caso do paciente 3 está sendo causado por uma condução elétr...
6- Sabendo que o caso do paciente 3 está sendo causado por uma condução elétr...
Texto: Ezequiel 1:1 – Bíblia ARA Aconteceu no trigésimo ano, no quinto dia do... by azulassessoriaacadem3
Texto: Ezequiel 1:1 – Bíblia ARA Aconteceu no trigésimo ano, no quinto dia do...Texto: Ezequiel 1:1 – Bíblia ARA Aconteceu no trigésimo ano, no quinto dia do...
Texto: Ezequiel 1:1 – Bíblia ARA Aconteceu no trigésimo ano, no quinto dia do...
Passado uma semana após o parto, Beatriz marcou uma consulta médica para seu ... by azulassessoriaacadem3
Passado uma semana após o parto, Beatriz marcou uma consulta médica para seu ...Passado uma semana após o parto, Beatriz marcou uma consulta médica para seu ...
Passado uma semana após o parto, Beatriz marcou uma consulta médica para seu ...
ATIVIDADE PROPOSTA Considerando o exposto acima, elabore um texto dissertat... by azulassessoriaacadem3
ATIVIDADE PROPOSTA   Considerando o exposto acima, elabore um texto dissertat...ATIVIDADE PROPOSTA   Considerando o exposto acima, elabore um texto dissertat...
ATIVIDADE PROPOSTA Considerando o exposto acima, elabore um texto dissertat...
Slides Lição 12, CPAD, O Modelo de Missões da Igreja de Antioquia.pptx by LuizHenriquedeAlmeid6
Slides Lição 12, CPAD, O Modelo de Missões da Igreja de Antioquia.pptxSlides Lição 12, CPAD, O Modelo de Missões da Igreja de Antioquia.pptx
Slides Lição 12, CPAD, O Modelo de Missões da Igreja de Antioquia.pptx
3- Levando em consideração suas respostas anteriores, qual o pré-diagnóstico ... by azulassessoriaacadem3
3- Levando em consideração suas respostas anteriores, qual o pré-diagnóstico ...3- Levando em consideração suas respostas anteriores, qual o pré-diagnóstico ...
3- Levando em consideração suas respostas anteriores, qual o pré-diagnóstico ...
5) Anexo do folder e da foto de distribuição do folder: Após elaborado o fold... by azulassessoriaacadem3
5) Anexo do folder e da foto de distribuição do folder: Após elaborado o fold...5) Anexo do folder e da foto de distribuição do folder: Após elaborado o fold...
5) Anexo do folder e da foto de distribuição do folder: Após elaborado o fold...
Texto: Ezequiel 1:1 – Bíblia ARA Aconteceu no trigésimo ano, no quinto dia do... by azulassessoriaacadem3
Texto: Ezequiel 1:1 – Bíblia ARA Aconteceu no trigésimo ano, no quinto dia do...Texto: Ezequiel 1:1 – Bíblia ARA Aconteceu no trigésimo ano, no quinto dia do...
Texto: Ezequiel 1:1 – Bíblia ARA Aconteceu no trigésimo ano, no quinto dia do...
LISTE cinco condições clínicas e para cada uma delas CITE as metas/objetivos ... by azulassessoriaacadem3
LISTE cinco condições clínicas e para cada uma delas CITE as metas/objetivos ...LISTE cinco condições clínicas e para cada uma delas CITE as metas/objetivos ...
LISTE cinco condições clínicas e para cada uma delas CITE as metas/objetivos ...
MAPA - PED - PROBLEMAS E DIFICULDADES DE APRENDIZAGEM NA INFÂNCIA - 54/2023 ... by assessoriaff08
MAPA - PED - PROBLEMAS E DIFICULDADES DE APRENDIZAGEM NA INFÂNCIA - 54/2023  ...MAPA - PED - PROBLEMAS E DIFICULDADES DE APRENDIZAGEM NA INFÂNCIA - 54/2023  ...
MAPA - PED - PROBLEMAS E DIFICULDADES DE APRENDIZAGEM NA INFÂNCIA - 54/2023 ...
assessoriaff0822 views
3) Os AINEs são classificados de acordo com sua composição química. A esse re... by HelpEducacional
3) Os AINEs são classificados de acordo com sua composição química. A esse re...3) Os AINEs são classificados de acordo com sua composição química. A esse re...
3) Os AINEs são classificados de acordo com sua composição química. A esse re...
HelpEducacional132 views
Você como nutricionista precisa estudar sobre alguns conceitos, para conhecer... by azulassessoriaacadem3
Você como nutricionista precisa estudar sobre alguns conceitos, para conhecer...Você como nutricionista precisa estudar sobre alguns conceitos, para conhecer...
Você como nutricionista precisa estudar sobre alguns conceitos, para conhecer...
O agronegócio desempenha um papel crucial na economia global, fornecendo alim... by azulassessoriaacadem3
O agronegócio desempenha um papel crucial na economia global, fornecendo alim...O agronegócio desempenha um papel crucial na economia global, fornecendo alim...
O agronegócio desempenha um papel crucial na economia global, fornecendo alim...
Etapa 2: a segunda etapa da seleção consiste em definir a forma de pagamento ... by azulassessoriaacadem3
Etapa 2: a segunda etapa da seleção consiste em definir a forma de pagamento ...Etapa 2: a segunda etapa da seleção consiste em definir a forma de pagamento ...
Etapa 2: a segunda etapa da seleção consiste em definir a forma de pagamento ...
b) Explique os componentes das valvas cardíacas e o seu funcionamento durante... by HelpEducacional
b) Explique os componentes das valvas cardíacas e o seu funcionamento durante...b) Explique os componentes das valvas cardíacas e o seu funcionamento durante...
b) Explique os componentes das valvas cardíacas e o seu funcionamento durante...
HelpEducacional49 views
Você foi convidado a ser o Nutricionista integrante de uma equipe que vai des... by azulassessoriaacadem3
Você foi convidado a ser o Nutricionista integrante de uma equipe que vai des...Você foi convidado a ser o Nutricionista integrante de uma equipe que vai des...
Você foi convidado a ser o Nutricionista integrante de uma equipe que vai des...
a) Estruturar o Balancete de Verificação da empresa Estilo Chic Ltda. ordenan... by HelpEducacional
a) Estruturar o Balancete de Verificação da empresa Estilo Chic Ltda. ordenan...a) Estruturar o Balancete de Verificação da empresa Estilo Chic Ltda. ordenan...
a) Estruturar o Balancete de Verificação da empresa Estilo Chic Ltda. ordenan...
HelpEducacional903 views

PHP Experience 2016 - [Palestra] Keynote: PHP-7

  • 6. Agenda • Mudanças para o usuário • Mudanças internas • PHP.NEXT
  • 7. Mudanças para o usuário • Quebras de compatibilidade • Novos operadores • Erros e exceções • Indução de tipo escalar (Scalar type hint) • Declaração de tipo de retorno (Return type hint) • Classes anônimas (Anonymous classes) • Palavras-chave semi-reservadas
  • 8. Quebras de compatibilidade <% /* ... */ %> <%= /* ... */ %> <script language="php">/* ... */</script> <? /* ... */ ?> <?= /* ... */ ?> <?php /* ... */ ?> • Tags alternativas do PHP
  • 9. Quebras de compatibilidade • Construtores do PHP 4 1 class Post { 2 public function post() { 3 echo 'post'; 4 } 5 } $post = new Post(); $post = new DomainPost(); 1 namespace Domain { 2 class Post { 3 public function post() { 4 echo 'post'; 5 } 6 } 7 }
  • 10. Quebras de compatibilidade • Mudanças de sintaxe (Uniform variable syntax) • Novas combinações de operadores $foo()['bar']() [$obj1, $obj2][0]->prop $foo->bar()::baz() $foo->bar()() (function () {})()
  • 11. Quebras de compatibilidade • Mudanças de sintaxe (Uniform variable syntax) • Acesso indireto à variáveis, propriedades e métodos Expressão Interpretação no PHP 5 Interpretação no PHP 7 $$foo['bar']['baz'] ${$foo['bar']['baz']} ($$foo)['bar']['baz'] $foo->$bar['baz'] $foo->{$bar['baz']} ($foo->$bar)['baz'] $foo->$bar['baz']() $foo->{$bar['baz']}() ($foo->$bar)['baz']() Foo::$bar['baz']() Foo::{$bar['baz']}() (Foo::$bar)['baz']()
  • 12. Quebras de compatibilidade • Server APIs removidas:
 aolserver, apache, apache_hooks, apache2filter, caudium, continuity, isapi, milter, nsapi, phttpd, pi3web, roxen, thttpd, tux, webjames • Extensões depreciadas (PECL): 
 ereg, mssql, mysql, sybase_ct
  • 13. Novos operadores • Null coalesce operator (??) • Spaceship operator (<=>) • Group use • Unicode escape syntax (u)
  • 14. Novos operadores • Null coalesce operator (??) $page = $_GET['page'] ?: 1; if (isset($_GET['page'])) { $page = $_GET['page']; } else { $page = 1; } $page = isset($_GET['page']) ? $_GET['page'] : 1 ; $page = $_GET['page'] ?? 1;
  • 15. Novos operadores • Operador de comparação combinado (Spaceship operator) (<=>) 1 // Integers 2 echo 1 <=> 1; // 0 3 echo 2 <=> 1; // 1 4 echo 1 <=> 2; // -1 5 6 // Floats 7 echo 1.5 <=> 1.5; // 0 8 echo 2.5 <=> 1.5; // 1 9 echo 1.5 <=> 2.5; // -1 10 11 // Strings 12 echo 'a' <=> 'a'; // 0 13 echo 'z' <=> 'a'; // 1 14 echo 'a' <=> 'z'; // -1 15 16 echo 'zz' <=> 'aa'; // 1 17 echo 'a' <=> 'aa'; // -1
  • 16. Novos operadores • Group use use EblockDomainDirectoryEntity{ Consigner, Location as ConsignerLocation, User }; use EblockDomainDirectory{ DTO{ ConsignerUpdate as UpdateConsigner }, Entity{ Consigner, Location, User } };
  • 17. Novos operadores • Unicode escape syntax (u) ❤ (0x2764) // <3 no PHP 5 $char = html_entity_decode('&#x10084', 0, 'UTF-8'); $char = mb_convert_encoding('&#x10084', 'UTF-8', 'HTML-ENTITIES'); $char = json_decode('"u2764"'); // <3 no PHP 7 $char = "u2764";
  • 18. Erros e exceções • Usuário pode capturar qualquer chamada que possa gerar erros fatais • A maioria dos error E_RECOVERABLE viraram Exceptions • Erros E_STRICT foram re-classificados como E_WARN e E_NOTICE • Erros fatais são ou herdam a classe "Error" • Erros de análise sintática geram "ParseError" • Ambos "Error" e "Exception" implementam a interface "Throwable"
  • 20. Erros e exceções 1 echo 'PHP ' . phpversion() . PHP_EOL; 2 3 try { 4 $foo = new foo(); 5 } catch (Exception $e) { 6 echo 'I am an exception: ' . $e->getMessage() . PHP_EOL; 7 } catch (Error $e) { 8 echo 'I am an error: ' . $e->getMessage() . PHP_EOL; 9 } catch (Throwable $t) { 10 echo 'I am throwable: ' . $t->getMessage() . PHP_EOL; 11 } 12 13 // PHP 5.6.19 14 // Fatal error: Class 'foo' not found in 15 // Documents/PHP7/throwable.php on line 5 16 17 // PHP 7.0.4 18 // I am an error: Class 'foo' not found
  • 21. Indução de tipo escalar • Funciona de duas formas distintas: • Weak mode (Coercivo) • Strict (Forte) declare(strict_types=1);
  • 22. Indução de tipo escalar Tipo declarado int float string bool object int yes yes* yes† yes no float yes yes yes† yes no string yes yes yes yes yes‡ bool yes yes yes yes no * Somente pontos flutuantes não-NaN e entre PHP_INT_MIN e PHP_INT_MAX serão aceitos. † Se for uma string numérica ‡ Somente se o objeto tiver o método __toString() function setEnabled(bool $enabled) { /* ... */ }
  • 23. Indução de tipo escalar 1 declare(strict_types=1); 2 3 function welcome(string $name) { 4 echo 'Welcome to the show, ' . $name; 5 } 6 7 welcome('Guilherme'); 8 // Welcome to the show, Guilherme 9 10 welcome(42); 11 // TypeError: Argument 1 passed to welcome() 12 // must be of the type string, integer given
  • 24. Declaração de tipo de retorno function getCreator(): UserInterface { return $this->getPost()->getAuthor(); } function getAuthor(): UserInterface { return 'Guilherme Blanco'; } getAuthor(); // TypeError: Return value of getAuthor() must be // an instance of UserInterface, string returned
  • 25. Classes anônimas // Pre PHP 7 class EchoLogger implements LoggerInterface { public function log($message) { echo $message; } } $application->setLogger(new Logger()); // PHP 7, seu lindo! <3 $application->setLogger(new class () implements LoggerInterface { public function log(string $message) { echo $message; } });
  • 26. Palavras-chave semi-reservadas • abstract • and • array • as • break • callable • case • catch • class* • clone • const • continue • declare • default • die • do • global • goto • if • implements • include • include_once • instanceof • insteadof • interface • list • namespace • new • or • parent • print • private • protected • public • require • require_once • return • self • static • switch • throw • trait • try • use • var • while • xor • yield • echo • else • elseif • enddeclare • endfor • endforeach • endif • endswitch • endwhile • exit • extends • final • finally • for • foreach • function
  • 27. Palavras-chave semi-reservadas 1 namespace HTTP 2 { 3 class StatusCode 4 { 5 const CONTINUE = 100; 6 const SWITCHING_PROTOCOLS = 101; 7 // ... 8 } 9 }
  • 28. Palavras-chave semi-reservadas 1 $queryBuilder = $repository->createQueryBuilder('e'); 2 3 $queryBuilder 4 ->where() 5 ->and() 6 ->field('e.projeto') 7 ->not() 8 ->like('%secreto%') 9 ->end() 10 ->field('e.prioridade') 11 ->gt(9) 12 ->end() 13 ->end() 14 ->or() 15 ->field('e.codigo') 16 ->in([4, 5, 6]) 17 ->end() 18 ->end() 19 ->end() 20 ;
  • 29. Mudanças internas • Árvore de sintaxe abstrata (Abstract Syntax Tree) • Suporte completo a 64 bits • Large File Support (LFS) • Strings maiores que 231 • Suporte a inteiros de 64 bits • Novo gerenciamento de memória • ZVALs são alocados na stack • refcount mais preciso • Nova implementação de segurança sobre threads • Thread safety no PHP 5 implicava numa penalização de performance em ~20% • Otimização de estruturas de dados
  • 30. Árvore de sintaxe abstrata <?php $a = 42; $b = 24; echo $a + $b; <?php T_OPEN_TAG
 $a T_VARIABLE
 = T_EQUALS
 42 T_LNUMBER
 ; T_SEMICOLON
 $b T_VARIABLE
 = T_EQUALS
 24 T_LNUMBER
 ; T_SEMICOLON
 echo T_ECHO
 $a T_VARIABLE
 + T_PLUS
 $b T_VARIABLE
 ; T_SEMICOLON lex ASSIGN $a 42
 ASSIGN $b 24
 ADD $a $b ~0
 ECHO ~0
 RETURN 1 parse + compile
  • 31. Árvore de sintaxe abstrata <?php $a = 42; $b = 24; echo $a + $b; <?php T_OPEN_TAG
 $a T_VARIABLE
 = T_EQUALS
 42 T_LNUMBER
 ; T_SEMICOLON
 $b T_VARIABLE
 = T_EQUALS
 24 T_LNUMBER
 ; T_SEMICOLON
 echo T_ECHO
 $a T_VARIABLE
 + T_PLUS
 $b T_VARIABLE
 ; T_SEMICOLON lex stmts assign assign echo 42 24 + $a $b $a $b var var parse ASSIGN $a 42
 ASSIGN $b 24
 ADD $a $b ~0
 ECHO ~0
 RETURN 1 compile
  • 32. Otimização de estruturas de dados • ~20% do tempo gasto no PHP 5 era referente à alocação de memória • No PHP 7, foi reduzido o número de alocações • No PHP 7, foi reduzido o consumo de memória • No PHP 7, foi reduzido o número de indicações • O motor de execução agora utiliza stack push e gerencia argumentos • Chamada pra funções foram drasticamente refatoradas • Variáveis no PHP 7 são cacheadas de forma mais eficiente • String são refcounted
  • 33. Otimização de estruturas de dados • ZVAL no PHP 5 1 typedef union _zvalue_value { 2 long lval; 3 double dval; 4 struct { 5 char *val; 6 int len; 7 } str; 8 HashTable *ht; 9 zend_object_value obj; 10 zend_ast *ast; 11 } zvalue_value; 1 struct _zval_struct { 2 zvalue_value value; 4 zend_uint refcount__gc; 5 zend_uchar type; 6 zend_uchar is_ref__gc; 7 } zval;
  • 34. ZVAL no PHP 5 value
 ZVAL ty Crédito: Nikita Popov
  • 35. ZVAL no PHP 5 value (simple):
 null, bool, int, float ZVAL ty Crédito: Nikita Popov
  • 36. ZVAL no PHP 5 value (complex):
 ZVAL ty complex data structure:
 string, array, object Crédito: Nikita Popov
  • 37. ZVAL no PHP 5 1 $a = []; zval *$a value (complex):
 ZVAL ty complex data structure:
 string, array, object refcount = 1 Crédito: Nikita Popov
  • 38. ZVAL no PHP 5 zval *$a 1 $a = []; 2 $b = $a; value (complex):
 ZVAL ty complex data structure:
 string, array, object refcount = 1 Crédito: Nikita Popov
  • 39. ZVAL no PHP 5 zval *$a 1 $a = []; 2 $b = $a; value (complex):
 ZVAL ty complex data structure:
 string, array, object refcount = 2 zval *$b Crédito: Nikita Popov
  • 40. 1 typedef union _zend_value { 2 zend_long lval; 3 double dval; 4 zend_refcounted *counted; 5 zend_string *str; 6 zend_array *arr; 7 zend_object *obj; 8 zend_resource *res; 9 zend_reference *ref; 10 zend_ast_ref *ast; 11 zval *zv; 12 void *ptr; 13 zend_class_entry *ce; 14 zend_function *func; 15 struct { 16 uint32_t w1; 17 uint32_t w2; 18 } ww; 19 } zend_value; 1 struct _zval_struct { 2 zend_value value; 3 union { 4 struct { 5 ZEND_ENDIAN_LOHI_4( 6 zend_uchar type, 7 zend_uchar type_flags, 8 zend_uchar const_flags, 9 zend_uchar reserved) 10 } v; 11 uint32_t type_info; 12 } u1; 13 union { 14 uint32_t var_flags; 15 uint32_t next; 16 uint32_t cache_slot; 17 uint32_t lineno; 18 uint32_t num_args; 19 uint32_t fe_pos; 20 uint32_t fe_iter_idx; 21 uint32_t access_flags; 22 } u2; 23 } zval; ZVAL no PHP 7
  • 41. ZVAL no PHP 7 zval *$a 1 $a = []; 2 $b = $a; value (complex):
 ZVAL ty zval *$b complex data structure:
 string, array, object refcount = 2 Crédito: Nikita Popov
  • 42. ZVAL no PHP 7 zval *$a 1 $a = []; 2 $b = $a; zval *$b complex data structure:
 string, array, object refcount = 2 ZVAL value (complex):
 type_info Crédito: Nikita Popov
  • 43. ZVAL no PHP 7 $a 1 $a = []; 2 $b = $a; $b complex data structure:
 string, array, object refcount = 2 value (complex):
 type_info value (complex):
 type_info Crédito: Nikita Popov
  • 44. PHP 5 vs. PHP 7 ZVAL zval * value (simple):
 null, bool, int, float tyrefcount = 1 1 alocação de memória 1 nível de indireção 40 bytes value (simple):
 null, bool, int, float type_info sem alocações de memória sem indireções 16 bytes
  • 45. PHP 5 vs. PHP 7 ZVAL zval * complex data structure:
 string, array, object value (complex):
 tyrefcount = 1 2 alocações de memória 2 níveis de indireção 40 bytes complex data structure:
 string, array, object refcount = 1 value (complex):
 type_info 1 alocação de memória 1 nível de indireção 24 bytes
  • 46. PHP 5 vs. PHP 7 Objetos zval object store bucket object real tabela de propriedades valor da propriedade zval objeto real + tabela de propriedades
 (incluindo valores) PHP 5 PHP 7 Alocações 2 + 1 / propriedade 1 + 0 / propriedade Tamanho 96 + 40 / propriedade 48 + 16 / propriedade Indireções 4 1
  • 47. PHP.NEXT • Parâmetros nomeados (Named parameters) • Visibilidade de classes (Class Visibility) • Tipagem de propriedades (Typed properties) • Anotações (Annotations) • Coleções (Collections) • Estruturas genéricas (Generics)