SlideShare uma empresa Scribd logo
1 de 49
Baixar para ler offline
PHP 7
Guilherme Blanco
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

Mais conteúdo relacionado

Mais procurados

Minicurso Shell Script
Minicurso Shell ScriptMinicurso Shell Script
Minicurso Shell ScriptLuís Eduardo
 
PHP Jedi - Boas Práticas e Alta Performance
PHP Jedi - Boas Práticas e Alta PerformancePHP Jedi - Boas Práticas e Alta Performance
PHP Jedi - Boas Práticas e Alta PerformanceFelipe Ribeiro
 
Introducao ao Shell Script
Introducao ao Shell ScriptIntroducao ao Shell Script
Introducao ao Shell ScriptHugo Maia Vieira
 
PHP na Tela Escura: Aplicações Poderosas em Linha de Comando
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 ComandoRafael Jaques
 
Código legado - PHP Conference Brasil - 2014
Código legado - PHP Conference Brasil - 2014Código legado - PHP Conference Brasil - 2014
Código legado - PHP Conference Brasil - 2014Michael Castillo Granados
 
Introdução ao Shell Script (versão estendida)
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 Vieira
 
Prog web 02-php-primeiros-passos
Prog web 02-php-primeiros-passosProg web 02-php-primeiros-passos
Prog web 02-php-primeiros-passosRegis Magalhães
 
Perl Moderno, dia3
Perl Moderno, dia3Perl Moderno, dia3
Perl Moderno, dia3garux
 
(Portuguese) Java EE Poliglota
(Portuguese) Java EE Poliglota(Portuguese) Java EE Poliglota
(Portuguese) Java EE PoliglotaPhil Calçado
 
Criando APIs usando o micro-framework Respect
Criando APIs usando o micro-framework RespectCriando APIs usando o micro-framework Respect
Criando APIs usando o micro-framework RespectIvan Rosolen
 

Mais procurados (20)

Minicurso Shell Script
Minicurso Shell ScriptMinicurso Shell Script
Minicurso Shell Script
 
PHP GERAL
PHP GERALPHP GERAL
PHP GERAL
 
PHP Jedi - Boas Práticas e Alta Performance
PHP Jedi - Boas Práticas e Alta PerformancePHP Jedi - Boas Práticas e Alta Performance
PHP Jedi - Boas Práticas e Alta Performance
 
Php
PhpPhp
Php
 
Shell script
Shell scriptShell script
Shell script
 
Introducao ao Shell Script
Introducao ao Shell ScriptIntroducao ao Shell Script
Introducao ao Shell Script
 
Linguagem PHP
Linguagem PHPLinguagem PHP
Linguagem PHP
 
PHP na Tela Escura: Aplicações Poderosas em Linha de Comando
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
 
Código legado - PHP Conference Brasil - 2014
Código legado - PHP Conference Brasil - 2014Código legado - PHP Conference Brasil - 2014
Código legado - PHP Conference Brasil - 2014
 
Rumo à Certificação PHP
Rumo à Certificação PHPRumo à Certificação PHP
Rumo à Certificação PHP
 
Curso Gratuito de Shell Script
Curso Gratuito de Shell ScriptCurso Gratuito de Shell Script
Curso Gratuito de Shell Script
 
Introdução ao Shell Script (versão estendida)
Introdução ao Shell Script (versão estendida)Introdução ao Shell Script (versão estendida)
Introdução ao Shell Script (versão estendida)
 
Prog web 02-php-primeiros-passos
Prog web 02-php-primeiros-passosProg web 02-php-primeiros-passos
Prog web 02-php-primeiros-passos
 
Php 02 Primeiros Passos
Php 02 Primeiros PassosPhp 02 Primeiros Passos
Php 02 Primeiros Passos
 
Perl Moderno, dia3
Perl Moderno, dia3Perl Moderno, dia3
Perl Moderno, dia3
 
(Portuguese) Java EE Poliglota
(Portuguese) Java EE Poliglota(Portuguese) Java EE Poliglota
(Portuguese) Java EE Poliglota
 
Tutorial Shell Script
Tutorial Shell ScriptTutorial Shell Script
Tutorial Shell Script
 
Python 04
Python 04Python 04
Python 04
 
PHP e Redis
PHP e RedisPHP e Redis
PHP e Redis
 
Criando APIs usando o micro-framework Respect
Criando APIs usando o micro-framework RespectCriando APIs usando o micro-framework Respect
Criando APIs usando o micro-framework Respect
 

Destaque

PHP Experience 2016 - [Palestra] Autenticação em APIs
PHP Experience 2016 - [Palestra] Autenticação em APIsPHP Experience 2016 - [Palestra] Autenticação em APIs
PHP Experience 2016 - [Palestra] Autenticação em APIsiMasters
 
PHP 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 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
 
PHP Experience 2016 - [Workshop] Deploy escalável na Amazon AWS
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
 
PHP Experience 2016 - [Workshop] APIs bem desenhadas como base para integrações
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
 
PHP Experience 2016 - [Palestra] Json Web Token (JWT)
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
 
PHP Experience 2016 - [Workshop] Agile: Test Driven Development
PHP Experience 2016 - [Workshop] Agile: Test Driven DevelopmentPHP Experience 2016 - [Workshop] Agile: Test Driven Development
PHP Experience 2016 - [Workshop] Agile: Test Driven DevelopmentiMasters
 
PHP Experience 2016 - [Workshop] Elastic Search: Turbinando sua aplicação PHP
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 PHPiMasters
 
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...
What I learnt: Elastic search & Kibana : introduction, installtion & configur...Rahul K Chauhan
 

Destaque (9)

PHP Experience 2016 - [Palestra] Autenticação em APIs
PHP Experience 2016 - [Palestra] Autenticação em APIsPHP Experience 2016 - [Palestra] Autenticação em APIs
PHP Experience 2016 - [Palestra] Autenticação em APIs
 
PHP 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 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
 
PHP Experience 2016 - [Workshop] Deploy escalável na Amazon AWS
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
 
Waw - Gas
Waw - GasWaw - Gas
Waw - Gas
 
PHP Experience 2016 - [Workshop] APIs bem desenhadas como base para integrações
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
 
PHP Experience 2016 - [Palestra] Json Web Token (JWT)
PHP Experience 2016 - [Palestra] Json Web Token (JWT)PHP Experience 2016 - [Palestra] Json Web Token (JWT)
PHP Experience 2016 - [Palestra] Json Web Token (JWT)
 
PHP Experience 2016 - [Workshop] Agile: Test Driven Development
PHP Experience 2016 - [Workshop] Agile: Test Driven DevelopmentPHP Experience 2016 - [Workshop] Agile: Test Driven Development
PHP Experience 2016 - [Workshop] Agile: Test Driven Development
 
PHP Experience 2016 - [Workshop] Elastic Search: Turbinando sua aplicação PHP
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
 
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...
What I learnt: Elastic search & Kibana : introduction, installtion & configur...
 

Semelhante a PHP 7: Novidades e mudanças

Preparando-se para a prova da Certificação Zend PHP 5.3
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
 
SIMCIT 2013 - Mini-curso PHP
SIMCIT 2013 - Mini-curso PHPSIMCIT 2013 - Mini-curso PHP
SIMCIT 2013 - Mini-curso PHPJonata Weber
 
55 New Things in Java 7 - Brazil
55 New Things in Java 7 - Brazil55 New Things in Java 7 - Brazil
55 New Things in Java 7 - BrazilStephen Chin
 
Javascript para CSharpers 4 - POO
Javascript para CSharpers 4 - POOJavascript para CSharpers 4 - POO
Javascript para CSharpers 4 - POOWesley Lemos
 
Palestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAPalestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAThiago Cifani
 
Relato Sobre a Migração de uma Aplicação Legada para Rails
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 RailsCássio Marques
 
Ruby e Erlang de mãos dadas
Ruby e Erlang de mãos dadasRuby e Erlang de mãos dadas
Ruby e Erlang de mãos dadasÉverton Ribeiro
 
PHP like a super hero
PHP like a super heroPHP like a super hero
PHP like a super heroElton Minetto
 
Groovy na plataforma Java
Groovy na plataforma JavaGroovy na plataforma Java
Groovy na plataforma JavaJoão Lourenço
 
(A06) LabMM3 - JavaScript
(A06) LabMM3 - JavaScript(A06) LabMM3 - JavaScript
(A06) LabMM3 - JavaScriptCarlos Santos
 
Curso JavaScript - Aula de Introdução como Programar
Curso JavaScript - Aula de Introdução como ProgramarCurso JavaScript - Aula de Introdução como Programar
Curso JavaScript - Aula de Introdução como ProgramarTiago Antônio da Silva
 

Semelhante a PHP 7: Novidades e mudanças (20)

TDC 2016 - PHP7
TDC 2016 - PHP7TDC 2016 - PHP7
TDC 2016 - PHP7
 
Java 9, 10 e ... 11
Java 9, 10 e ... 11Java 9, 10 e ... 11
Java 9, 10 e ... 11
 
Migrando para o PHP 5
Migrando para o PHP 5Migrando para o PHP 5
Migrando para o PHP 5
 
Preparando-se para a prova da Certificação Zend PHP 5.3
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
 
Zephir
ZephirZephir
Zephir
 
SIMCIT 2013 - Mini-curso PHP
SIMCIT 2013 - Mini-curso PHPSIMCIT 2013 - Mini-curso PHP
SIMCIT 2013 - Mini-curso PHP
 
55 New Things in Java 7 - Brazil
55 New Things in Java 7 - Brazil55 New Things in Java 7 - Brazil
55 New Things in Java 7 - Brazil
 
Javascript para CSharpers 4 - POO
Javascript para CSharpers 4 - POOJavascript para CSharpers 4 - POO
Javascript para CSharpers 4 - POO
 
Sapo Sessions PHP
Sapo Sessions PHPSapo Sessions PHP
Sapo Sessions PHP
 
Dev Ext PHP
Dev Ext PHPDev Ext PHP
Dev Ext PHP
 
Palestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAPalestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVA
 
Relato Sobre a Migração de uma Aplicação Legada para Rails
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
 
PHP 5.3 - Funções
PHP 5.3 - FunçõesPHP 5.3 - Funções
PHP 5.3 - Funções
 
Ruby e Erlang de mãos dadas
Ruby e Erlang de mãos dadasRuby e Erlang de mãos dadas
Ruby e Erlang de mãos dadas
 
PHP like a super hero
PHP like a super heroPHP like a super hero
PHP like a super hero
 
Groovy na plataforma Java
Groovy na plataforma JavaGroovy na plataforma Java
Groovy na plataforma Java
 
(A06) LabMM3 - JavaScript
(A06) LabMM3 - JavaScript(A06) LabMM3 - JavaScript
(A06) LabMM3 - JavaScript
 
Principais novidades do PHP7
Principais novidades do PHP7Principais novidades do PHP7
Principais novidades do PHP7
 
Desenvolvimento de Extensões PECL
Desenvolvimento de Extensões PECLDesenvolvimento de Extensões PECL
Desenvolvimento de Extensões PECL
 
Curso JavaScript - Aula de Introdução como Programar
Curso JavaScript - Aula de Introdução como ProgramarCurso JavaScript - Aula de Introdução como Programar
Curso JavaScript - Aula de Introdução como Programar
 

Mais de iMasters

O que você precisa saber para modelar bancos de dados NoSQL - Dani Monteiro
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
 
Postgres: wanted, beloved or dreaded? - Fabio Telles
Postgres: wanted, beloved or dreaded? - Fabio TellesPostgres: wanted, beloved or dreaded? - Fabio Telles
Postgres: wanted, beloved or dreaded? - Fabio TellesiMasters
 
Por que minha query esta lenta? - Suellen Moraes
Por que minha query esta lenta? - Suellen MoraesPor que minha query esta lenta? - Suellen Moraes
Por que minha query esta lenta? - Suellen MoraesiMasters
 
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...
Relato das trincheiras: o dia a dia de uma consultoria de banco de dados - Ig...iMasters
 
ORMs 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ç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
 
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 -...
SQL e NoSQL trabalhando juntos: uma comparação para obter o melhor de ambos -...iMasters
 
Arquitetando seus dados na prática para a LGPD - Alessandra Martins
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 MartinsiMasters
 
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...
O papel do DBA no mundo de ciência de dados e machine learning - Mauro Pichil...iMasters
 
Desenvolvimento Mobile Híbrido, Nativo ou Web: Quando usá-los - Juliana Chahoud
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 ChahoudiMasters
 
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
Use MDD e faça as máquinas trabalharem para você - Andreza LeiteiMasters
 
Entendendo os porquês do seu servidor - Talita Bernardes
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 BernardesiMasters
 
Backend performático além do "coloca mais máquina lá" - Diana Arnos
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 ArnosiMasters
 
Dicas para uma maior performance em APIs REST - Renato Groffe
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 GroffeiMasters
 
7 dicas de desempenho que equivalem por 21 - Danielle Monteiro
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 MonteiroiMasters
 
Quem se importa com acessibilidade Web? - Mauricio Maujor
Quem se importa com acessibilidade Web? - Mauricio MaujorQuem se importa com acessibilidade Web? - Mauricio Maujor
Quem se importa com acessibilidade Web? - Mauricio MaujoriMasters
 
Service Mesh com Istio e Kubernetes - Wellington Figueira da Silva
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 SilvaiMasters
 
Erros: Como eles vivem, se alimentam e se reproduzem? - Augusto Pascutti
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 PascuttiiMasters
 
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...
Elasticidade e engenharia de banco de dados para alta performance - Rubens G...iMasters
 
Construindo aplicações mais confiantes - Carolina Karklis
Construindo aplicações mais confiantes - Carolina KarklisConstruindo aplicações mais confiantes - Carolina Karklis
Construindo aplicações mais confiantes - Carolina KarklisiMasters
 
Monitoramento de Aplicações - Felipe Regalgo
Monitoramento de Aplicações - Felipe RegalgoMonitoramento de Aplicações - Felipe Regalgo
Monitoramento de Aplicações - Felipe RegalgoiMasters
 

Mais de iMasters (20)

O que você precisa saber para modelar bancos de dados NoSQL - Dani Monteiro
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
 
Postgres: wanted, beloved or dreaded? - Fabio Telles
Postgres: wanted, beloved or dreaded? - Fabio TellesPostgres: wanted, beloved or dreaded? - Fabio Telles
Postgres: wanted, beloved or dreaded? - Fabio Telles
 
Por que minha query esta lenta? - Suellen Moraes
Por que minha query esta lenta? - Suellen MoraesPor que minha query esta lenta? - Suellen Moraes
Por que minha query esta lenta? - Suellen Moraes
 
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...
Relato das trincheiras: o dia a dia de uma consultoria de banco de dados - Ig...
 
ORMs 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ç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
 
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 -...
SQL e NoSQL trabalhando juntos: uma comparação para obter o melhor de ambos -...
 
Arquitetando seus dados na prática para a LGPD - Alessandra Martins
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
 
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...
O papel do DBA no mundo de ciência de dados e machine learning - Mauro Pichil...
 
Desenvolvimento Mobile Híbrido, Nativo ou Web: Quando usá-los - Juliana Chahoud
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
 
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
Use MDD e faça as máquinas trabalharem para você - Andreza Leite
 
Entendendo os porquês do seu servidor - Talita Bernardes
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
 
Backend performático além do "coloca mais máquina lá" - Diana Arnos
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
 
Dicas para uma maior performance em APIs REST - Renato Groffe
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
 
7 dicas de desempenho que equivalem por 21 - Danielle Monteiro
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
 
Quem se importa com acessibilidade Web? - Mauricio Maujor
Quem se importa com acessibilidade Web? - Mauricio MaujorQuem se importa com acessibilidade Web? - Mauricio Maujor
Quem se importa com acessibilidade Web? - Mauricio Maujor
 
Service Mesh com Istio e Kubernetes - Wellington Figueira da Silva
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
 
Erros: Como eles vivem, se alimentam e se reproduzem? - Augusto Pascutti
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
 
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...
Elasticidade e engenharia de banco de dados para alta performance - Rubens G...
 
Construindo aplicações mais confiantes - Carolina Karklis
Construindo aplicações mais confiantes - Carolina KarklisConstruindo aplicações mais confiantes - Carolina Karklis
Construindo aplicações mais confiantes - Carolina Karklis
 
Monitoramento de Aplicações - Felipe Regalgo
Monitoramento de Aplicações - Felipe RegalgoMonitoramento de Aplicações - Felipe Regalgo
Monitoramento de Aplicações - Felipe Regalgo
 

Último

aula de bioquímica bioquímica dos carboidratos.ppt
aula de bioquímica bioquímica dos carboidratos.pptaula de bioquímica bioquímica dos carboidratos.ppt
aula de bioquímica bioquímica dos carboidratos.pptssuser2b53fe
 
COMPETÊNCIA 2 da redação do enem prodção textual professora vanessa cavalcante
COMPETÊNCIA 2 da redação do enem prodção textual professora vanessa cavalcanteCOMPETÊNCIA 2 da redação do enem prodção textual professora vanessa cavalcante
COMPETÊNCIA 2 da redação do enem prodção textual professora vanessa cavalcanteVanessaCavalcante37
 
PROJETO DE EXTENSÃO I - TERAPIAS INTEGRATIVAS E COMPLEMENTARES.pdf
PROJETO DE EXTENSÃO I - TERAPIAS INTEGRATIVAS E COMPLEMENTARES.pdfPROJETO DE EXTENSÃO I - TERAPIAS INTEGRATIVAS E COMPLEMENTARES.pdf
PROJETO DE EXTENSÃO I - TERAPIAS INTEGRATIVAS E COMPLEMENTARES.pdfHELENO FAVACHO
 
GEOGRAFIA - COMÉRCIO INTERNACIONAL E BLOCOS ECONÔMICOS - PROF. LUCAS QUEIROZ.pdf
GEOGRAFIA - COMÉRCIO INTERNACIONAL E BLOCOS ECONÔMICOS - PROF. LUCAS QUEIROZ.pdfGEOGRAFIA - COMÉRCIO INTERNACIONAL E BLOCOS ECONÔMICOS - PROF. LUCAS QUEIROZ.pdf
GEOGRAFIA - COMÉRCIO INTERNACIONAL E BLOCOS ECONÔMICOS - PROF. LUCAS QUEIROZ.pdfRavenaSales1
 
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEM
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEMPRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEM
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEMHELENO FAVACHO
 
apostila projeto de vida 2 ano ensino médio
apostila projeto de vida 2 ano ensino médioapostila projeto de vida 2 ano ensino médio
apostila projeto de vida 2 ano ensino médiorosenilrucks
 
421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf
421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf
421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdfLeloIurk1
 
Currículo - Ícaro Kleisson - Tutor acadêmico.pdf
Currículo - Ícaro Kleisson - Tutor acadêmico.pdfCurrículo - Ícaro Kleisson - Tutor acadêmico.pdf
Currículo - Ícaro Kleisson - Tutor acadêmico.pdfTutor de matemática Ícaro
 
Apresentação em Powerpoint do Bioma Catinga.pptx
Apresentação em Powerpoint do Bioma Catinga.pptxApresentação em Powerpoint do Bioma Catinga.pptx
Apresentação em Powerpoint do Bioma Catinga.pptxLusGlissonGud
 
Reta Final - CNU - Gestão Governamental - Prof. Stefan Fantini.pdf
Reta Final - CNU - Gestão Governamental - Prof. Stefan Fantini.pdfReta Final - CNU - Gestão Governamental - Prof. Stefan Fantini.pdf
Reta Final - CNU - Gestão Governamental - Prof. Stefan Fantini.pdfWagnerCamposCEA
 
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptx
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptxSlides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptx
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptxLuizHenriquedeAlmeid6
 
Slides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptx
Slides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptxSlides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptx
Slides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptxLuizHenriquedeAlmeid6
 
Recomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdf
Recomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdfRecomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdf
Recomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdfFrancisco Márcio Bezerra Oliveira
 
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...azulassessoria9
 
PROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdf
PROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdfPROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdf
PROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdfHELENO FAVACHO
 
Teoria heterotrófica e autotrófica dos primeiros seres vivos..pptx
Teoria heterotrófica e autotrófica dos primeiros seres vivos..pptxTeoria heterotrófica e autotrófica dos primeiros seres vivos..pptx
Teoria heterotrófica e autotrófica dos primeiros seres vivos..pptxTailsonSantos1
 
Slide - EBD ADEB 2024 Licao 02 2Trim.pptx
Slide - EBD ADEB 2024 Licao 02 2Trim.pptxSlide - EBD ADEB 2024 Licao 02 2Trim.pptx
Slide - EBD ADEB 2024 Licao 02 2Trim.pptxedelon1
 
matematica aula didatica prática e tecni
matematica aula didatica prática e tecnimatematica aula didatica prática e tecni
matematica aula didatica prática e tecniCleidianeCarvalhoPer
 
atividades_reforço_4°ano_231206_132728.pdf
atividades_reforço_4°ano_231206_132728.pdfatividades_reforço_4°ano_231206_132728.pdf
atividades_reforço_4°ano_231206_132728.pdfLuizaAbaAba
 

Último (20)

aula de bioquímica bioquímica dos carboidratos.ppt
aula de bioquímica bioquímica dos carboidratos.pptaula de bioquímica bioquímica dos carboidratos.ppt
aula de bioquímica bioquímica dos carboidratos.ppt
 
COMPETÊNCIA 2 da redação do enem prodção textual professora vanessa cavalcante
COMPETÊNCIA 2 da redação do enem prodção textual professora vanessa cavalcanteCOMPETÊNCIA 2 da redação do enem prodção textual professora vanessa cavalcante
COMPETÊNCIA 2 da redação do enem prodção textual professora vanessa cavalcante
 
PROJETO DE EXTENSÃO I - TERAPIAS INTEGRATIVAS E COMPLEMENTARES.pdf
PROJETO DE EXTENSÃO I - TERAPIAS INTEGRATIVAS E COMPLEMENTARES.pdfPROJETO DE EXTENSÃO I - TERAPIAS INTEGRATIVAS E COMPLEMENTARES.pdf
PROJETO DE EXTENSÃO I - TERAPIAS INTEGRATIVAS E COMPLEMENTARES.pdf
 
GEOGRAFIA - COMÉRCIO INTERNACIONAL E BLOCOS ECONÔMICOS - PROF. LUCAS QUEIROZ.pdf
GEOGRAFIA - COMÉRCIO INTERNACIONAL E BLOCOS ECONÔMICOS - PROF. LUCAS QUEIROZ.pdfGEOGRAFIA - COMÉRCIO INTERNACIONAL E BLOCOS ECONÔMICOS - PROF. LUCAS QUEIROZ.pdf
GEOGRAFIA - COMÉRCIO INTERNACIONAL E BLOCOS ECONÔMICOS - PROF. LUCAS QUEIROZ.pdf
 
Aula sobre o Imperialismo Europeu no século XIX
Aula sobre o Imperialismo Europeu no século XIXAula sobre o Imperialismo Europeu no século XIX
Aula sobre o Imperialismo Europeu no século XIX
 
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEM
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEMPRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEM
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEM
 
apostila projeto de vida 2 ano ensino médio
apostila projeto de vida 2 ano ensino médioapostila projeto de vida 2 ano ensino médio
apostila projeto de vida 2 ano ensino médio
 
421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf
421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf
421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf
 
Currículo - Ícaro Kleisson - Tutor acadêmico.pdf
Currículo - Ícaro Kleisson - Tutor acadêmico.pdfCurrículo - Ícaro Kleisson - Tutor acadêmico.pdf
Currículo - Ícaro Kleisson - Tutor acadêmico.pdf
 
Apresentação em Powerpoint do Bioma Catinga.pptx
Apresentação em Powerpoint do Bioma Catinga.pptxApresentação em Powerpoint do Bioma Catinga.pptx
Apresentação em Powerpoint do Bioma Catinga.pptx
 
Reta Final - CNU - Gestão Governamental - Prof. Stefan Fantini.pdf
Reta Final - CNU - Gestão Governamental - Prof. Stefan Fantini.pdfReta Final - CNU - Gestão Governamental - Prof. Stefan Fantini.pdf
Reta Final - CNU - Gestão Governamental - Prof. Stefan Fantini.pdf
 
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptx
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptxSlides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptx
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptx
 
Slides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptx
Slides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptxSlides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptx
Slides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptx
 
Recomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdf
Recomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdfRecomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdf
Recomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdf
 
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...
 
PROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdf
PROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdfPROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdf
PROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdf
 
Teoria heterotrófica e autotrófica dos primeiros seres vivos..pptx
Teoria heterotrófica e autotrófica dos primeiros seres vivos..pptxTeoria heterotrófica e autotrófica dos primeiros seres vivos..pptx
Teoria heterotrófica e autotrófica dos primeiros seres vivos..pptx
 
Slide - EBD ADEB 2024 Licao 02 2Trim.pptx
Slide - EBD ADEB 2024 Licao 02 2Trim.pptxSlide - EBD ADEB 2024 Licao 02 2Trim.pptx
Slide - EBD ADEB 2024 Licao 02 2Trim.pptx
 
matematica aula didatica prática e tecni
matematica aula didatica prática e tecnimatematica aula didatica prática e tecni
matematica aula didatica prática e tecni
 
atividades_reforço_4°ano_231206_132728.pdf
atividades_reforço_4°ano_231206_132728.pdfatividades_reforço_4°ano_231206_132728.pdf
atividades_reforço_4°ano_231206_132728.pdf
 

PHP 7: Novidades e mudanças

  • 2.
  • 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)