Gustavo Almeida
Migrando para PHP7
Prazer, meu nome é Gustavo!
Porque PHP7?
Se por acaso não te interessa velocidade ...
● Tipagem : Indução de tipos primitivos e tipos de retorno.
● Novos operadores.
● Erros e exceções.
Para instalar o PHP7 via apt-get :
● sudo add-apt-repository ppa:ondrej/php
● sudo apt-get update
● sudo apt-get install php7.0
● sudo apt-get install php7.0-mysql
1 - Tipagem - function f(int $a, float $b)
O default é sem
strict_types
Conversão Implicita
de tipos do PHP
está valendo.
Colocando a declaração com
declare, somente o tipo
especificado é permitido.
1 - Tipagem - function f(int $a): string
Sem strict_types ele faz
a conversão implicita.
De int para string: ok
De int para array: erro
Neste caso como
declaramos strict_types ele
só admite se for do tipo
especificado.
2 - Palavras Reservadas
3 - Depreciados
● Construct PHP4
● Tags alternativas (fica só a tradicional <?php )
● extensão mysql,mssql
● ereg
4 - Operadores
● …
● ??
● u
● <=>
4 - Splat (...) - esse é do 5.6, ok?
Média aritmética numa só linha !!!
4 - Null Coalescing (??)
se o primeiro for falso, então o resultado será o segundo
5 - Unicode escape syntax (u)
Até na linha de comando
aparecem as figuras. Adeus
icones com imagens
6 - Spaceshift (<=>) - quando usar ?
ORDENAÇÃO
7 - define e session_start aceitam arrays
session_start([ ]);
ex. PDO 1 linha equivale a 4
8 - intdiv
9 - Agrupamento de use
vários use em uma
única linha
10 - Erros fatais não travam o PHP7
● Erros Fatais travam o PHP5.
● No PHP7 Erros Fatais agora são Exceções
● Agora isso mudou - Pode-se estender a Interface Throwable.
● set_error_handler() e set_exception_handler() são chamadas caso ninguém trate o erro.
try{
#Cod pode lançar Exception/Error
}catch(Throwable $t){
#executado no PHP7
}catch(Exception $e){
#executado no PHP5
}finally{
#executado de qq maneira
}
10 - Erros fatais não travam o PHP7
10 - Extendendo a Interface Throwable
interface MyPackageThrowable extends Throwable {}
class MyPackageException extends Exception implements MyPackageThrowable {}
function add(int $num1, int $num2) {
if($num1 < 0){
throw new MyPackageException(Num 1 < 0');
}
return $num1 + $num2;
}
Quebras de compatibilidade
expressão PHP5 PHP7
$$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’]()
Outras maneiras de acessar variáveis, propriedades e métodos.
Mudanças internas
● Árvore de sintaxe abstrata
● suporte 64 bits (LFS, strings > 2e31, inteiros de 64 bits).
● gerenciamento de memória.
● implementação de segurança sobre threads.
● estrutura de dados.
PHP 7.1 - mais novidades
● Tipos Nulos
function getName() : ? string {
return $this->name;
}
function getName(? User $user) : string {
return $user->name;
}
if(is_null($param)){
#....
}
PHP 7.1
● Desconstrução do array - parecido com list()
$response = [‘nome’=>’PHP-Conf’ , ‘ano’=>2016, ‘local’=>’SP’];
[‘nome’=>$nome , ‘ano’=>$ano, ‘local’=>’$local] = $response;
echo $nome;
PHP 7.1
● mais um tipo - void
function naoRetornaValor(string $email, string $msg): void{
mail($email, $msg);
}
PHP 7.1
● visibilidade de constantes (public, protected, private)
Class Imposto{
protected const TAXA=10;
//
}
Class ImpostoSP extends Imposto{
private const TAXA=20;
//
}
Class ImpostoRJ extends Imposto{
private const TAXA=30;
//
}
PHP 7.1
● agrupamento de exceções
try{
$gateway->send($cartao,$data,$cvv);
} catch(
DinheiroInsuficienteException |
ClienteNegativadoException |
ProdutoEmFaltaException |
NaoToAfimDeVenderException $e
)
{
$erro = “Desculpa , erro no pagto”;
}
github: lga37
slideshare: lga33
br.linkedin.com/in/lga37

Migrando para PHP7 - Novidades

  • 1.
  • 2.
    Prazer, meu nomeé Gustavo!
  • 3.
  • 4.
    Se por acasonão te interessa velocidade ... ● Tipagem : Indução de tipos primitivos e tipos de retorno. ● Novos operadores. ● Erros e exceções. Para instalar o PHP7 via apt-get : ● sudo add-apt-repository ppa:ondrej/php ● sudo apt-get update ● sudo apt-get install php7.0 ● sudo apt-get install php7.0-mysql
  • 5.
    1 - Tipagem- function f(int $a, float $b) O default é sem strict_types Conversão Implicita de tipos do PHP está valendo. Colocando a declaração com declare, somente o tipo especificado é permitido.
  • 6.
    1 - Tipagem- function f(int $a): string Sem strict_types ele faz a conversão implicita. De int para string: ok De int para array: erro Neste caso como declaramos strict_types ele só admite se for do tipo especificado.
  • 7.
    2 - PalavrasReservadas
  • 8.
    3 - Depreciados ●Construct PHP4 ● Tags alternativas (fica só a tradicional <?php ) ● extensão mysql,mssql ● ereg
  • 9.
    4 - Operadores ●… ● ?? ● u ● <=>
  • 10.
    4 - Splat(...) - esse é do 5.6, ok? Média aritmética numa só linha !!!
  • 11.
    4 - NullCoalescing (??) se o primeiro for falso, então o resultado será o segundo
  • 12.
    5 - Unicodeescape syntax (u) Até na linha de comando aparecem as figuras. Adeus icones com imagens
  • 13.
    6 - Spaceshift(<=>) - quando usar ? ORDENAÇÃO
  • 14.
    7 - definee session_start aceitam arrays session_start([ ]); ex. PDO 1 linha equivale a 4
  • 15.
  • 16.
    9 - Agrupamentode use vários use em uma única linha
  • 17.
    10 - Errosfatais não travam o PHP7 ● Erros Fatais travam o PHP5. ● No PHP7 Erros Fatais agora são Exceções ● Agora isso mudou - Pode-se estender a Interface Throwable. ● set_error_handler() e set_exception_handler() são chamadas caso ninguém trate o erro.
  • 18.
    try{ #Cod pode lançarException/Error }catch(Throwable $t){ #executado no PHP7 }catch(Exception $e){ #executado no PHP5 }finally{ #executado de qq maneira } 10 - Erros fatais não travam o PHP7
  • 19.
    10 - Extendendoa Interface Throwable interface MyPackageThrowable extends Throwable {} class MyPackageException extends Exception implements MyPackageThrowable {} function add(int $num1, int $num2) { if($num1 < 0){ throw new MyPackageException(Num 1 < 0'); } return $num1 + $num2; }
  • 20.
    Quebras de compatibilidade expressãoPHP5 PHP7 $$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’]() Outras maneiras de acessar variáveis, propriedades e métodos.
  • 21.
    Mudanças internas ● Árvorede sintaxe abstrata ● suporte 64 bits (LFS, strings > 2e31, inteiros de 64 bits). ● gerenciamento de memória. ● implementação de segurança sobre threads. ● estrutura de dados.
  • 22.
    PHP 7.1 -mais novidades ● Tipos Nulos function getName() : ? string { return $this->name; } function getName(? User $user) : string { return $user->name; } if(is_null($param)){ #.... }
  • 23.
    PHP 7.1 ● Desconstruçãodo array - parecido com list() $response = [‘nome’=>’PHP-Conf’ , ‘ano’=>2016, ‘local’=>’SP’]; [‘nome’=>$nome , ‘ano’=>$ano, ‘local’=>’$local] = $response; echo $nome;
  • 24.
    PHP 7.1 ● maisum tipo - void function naoRetornaValor(string $email, string $msg): void{ mail($email, $msg); }
  • 25.
    PHP 7.1 ● visibilidadede constantes (public, protected, private) Class Imposto{ protected const TAXA=10; // } Class ImpostoSP extends Imposto{ private const TAXA=20; // } Class ImpostoRJ extends Imposto{ private const TAXA=30; // }
  • 26.
    PHP 7.1 ● agrupamentode exceções try{ $gateway->send($cartao,$data,$cvv); } catch( DinheiroInsuficienteException | ClienteNegativadoException | ProdutoEmFaltaException | NaoToAfimDeVenderException $e ) { $erro = “Desculpa , erro no pagto”; }
  • 28.