php7 e além
TRANSCRIPT
PHP7 e alémMaturidade, Comunidade e Visibilidade
Anderson Casimiro@duodraco
Agenda
História
Chegamos ao Se7e…
Principais funcionalidades
Ecossistema
O que vem por aí?
1995 ~ 2004
PHP, FI, 3, 4
Bad Times...
5 2004
5
OOP Melhorada
Standard PHP Library
PDO, DateTime …
Namespaces
Anonymous Functions
Traits
Generators (yield)
Yearly Releases
Performance
Chegamos ao Se7e...
HipHop
Especificação do PHP
HHVM
Hack
php-src/tree/phpng
e o PHP 6?
O que é o ?
Performance
source: http://www.zend.com/en/resources/php7_infographic
source: http://www.zend.com/en/resources/php7_infographic
source: http://www.zend.com/en/resources/php7_infographic
Mudanças na Sintaxe
Null coalescing
Spaceship
Group use
Unicode escaping
/* PHP5 */$route = $_SERVER['request_uri'] ?:'/index';
/* não está bom… vamos tentar de novo */$route = isset($_SERVER['request_uri'])? $_SERVER['request_uri'] : '/index';
/* PHP7 */$route = $_SERVER['request_uri'] ?? '/index';
Null coalescing
Spaceship
Group use
Unicode escaping
echo 1 <=> 1; // 0echo 2 <=> 1; // 1echo 1 <=> 2; // -1
echo 'scala' <=> 'php'; // -1echo 'php' <=> 'javascript'; // 1echo 'A' <=> 'A'; // 0
$today = new DateTime;$someDay = new DateTime('1981-06-15');echo $today <=> $someDay; // 1
//Alguém aqui lembrou da função usort()?
Null coalescing
Spaceship
Group use
Unicode escaping
use \PHPSP\Talks\Evino\People\{
Attendee,
Speaker,
Staff as PeopleToThankFor
};
Null coalescing
Spaceship
Group use
Unicode escaping
html_entity_decode('𐂄', 0, 'UTF-8');
mb_convert_encoding('𐂄', 'UTF-8', 'HTML-ENTITIES');
json_decode('"\\u2764"');
"\u{2764}"
❤
Error Handling
<<interface>>Throwable
Error Exception
AssertionError
TypeErrorRuntimeException
ErrorException
ArtithmeticError
DivisionByZeroError
ParseError
try{ $object = new Test();} catch(\Exception $e){ // Exception logic} catch(\Error $err) { // Error logic} catch(\Throwable $t) { // Error or Exception logic}
Anonymous Classes
interface Logger { public function log(string $msg);}
class Application { private $logger; public function setLogger(Logger $logger) { $this->logger = $logger; }}
$app = new Application;$app->setLogger(new class implements Logger { public function log(string $msg) { echo $msg; }});
Scalar Type Hinting + Return Type Declaration
function buildUser(string $name, int ?$age): User { $user = new User(); $user->setName($name); $user->setAge($age ?? 18); return $user; }
declare(strict_types = 1);
$zoeira = “”;
$apelido = function () use (&$zoeira): void{ $zoeirasDisponiveis = [
'Baladinha top','PHP é fraco, não é tipado','PHP moleque, pé no chão'
];$qual = rand(0, 3);
$zoeira = $zoeirasDisponiveis[$qual];}
echo $zoeira();
Iterable
function plotarResultado(Iterable $colecao = []){ foreach($colecao as $item){ echo (string) $item; }}
$array = [/* ... */];
$statement = $pdo->execute();
plotarResultado($array);
plotarResultado($statement);
Mais sobre o 7
Árvore Abstrata de Sintaxe (AST)
Suporte completo a 64 bits
Gerenciamento de memória
Thread safety sem perdas
Estruturas internas de dados otimizadas
Closure::call()
unserialize() filtrado
IntlChar
Expectations
Delegação de Generators + expressions de retorno
CSPRNG
intdiv()
Session options
Especificar chaves na função list()
Modificadores de visibilidade de constantes de Classe
Catch para multiplos Throwables
Melhorias no Curl (HTTP/2 Server Push)
Criar Closure de um Callable
Melhorias no PCNTL
Alternative tags
Old style constructors
Uniform variable syntaxOperators + indirect access
Server APIs (SAPI)
Extensionsereg, mssql, mysql, sybase_ct
Quebras de compatibilidade 5 -> 7
bit.ly/php5to7
What’s Next...
Descontinuações a partir do 7.2
bit.ly/depr-php-7-2
__autoload
$php_errormsg
create_function()
mbstring.func_overload
(unset) $var
parse_str($arg1)
gmp_random()
each()
assert(“arg”)
set_error_handler(..., $errcontext)
Criptografia Moderna (libSodium)
Ecossistema PHP
Servidor Web
Aplicações
Empresas
O que vem por aí?
Blood has the same color for everyone