migrando para php7 - novidades
TRANSCRIPT
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: lga37slideshare: lga33br.linkedin.com/in/lga37