Upgrade to Pro — share decks privately, control downloads, hide ads and more …

PHP – principais novidades do 5.3 ao 5.6

PHP – principais novidades do 5.3 ao 5.6

Reveja as principais funcionalidades do PHP 5.4 ao PHP 5.6.

Alan Michel Willms Quinot

August 28, 2014
Tweet

More Decks by Alan Michel Willms Quinot

Other Decks in Programming

Transcript

  1. Justificativa • O que? ◦ Rever as funcionalidades do PHP

    5.3. ◦ Conhecer as novidades do PHP 5.4, 5.5 e 5.6. • Por quê? ◦ Não reinventar a roda. ◦ Soluções novas para problemas velhos. ◦ Maior performance.
  2. Por que atualizar o PHP? • O PHP 5.3 não

    é mais mantido • Falhas de segurança • Correções de bugs • Desempenho melhor • Novas funcionalidades • Novas versões surgirão com mais frequência
  3. • Organização em namespaces • Closures (funções anônimas / lambdas)

    • Operador ternário • Late Static Bindings • Exceções aninhadas Veja mais: http://www.php.net/manual/pt_BR/migration53.new-features.php Principais novidades do PHP 5.3
  4. Organização em namespaces # /var/www/lib/Framework/Db/Adapter/PostgreSQL.php // Antes class Framework_Db_Adapter_PostgreSQL extends

    Framework_Db_Adapter_Abstract { ... } // Depois namespace Framework\Db\Adapater; use Framework\Db\ActiveRecord; class PostgreSQL extends Abstract { ... } $pdo = new \PDO; // classes fora do namespace $ar = new ActiveRecord; // classes do namespace ou importada
  5. Closures (func. anônimas / lambdas) public function importar() { $model

    = $this; $this->_transaction(function() use ($model){ $model->importarModulos(); $pessoas = $model->getProprietarios(); foreach ($pessoas as $pessoa) { $pessoa->bla_bla_bla = 'mimimimi'; $pessoa->save(); } //... $model->save(); }); }
  6. Operador ternário // Antes $meuValor = null; if ($algumaCoisa >

    93) { $meuValor = 'alto'; } else { $meuValor = 'baixo'; } // Depois $meuValor = $algumaCoisa > 93 ? 'alto' : 'baixo';
  7. Late Static Bindings class Mae { static function getNome() {

    return 'Mae'; } static function printNome() { // echo self::getNome(); --> sempre imprime Mae //$class = get_called_class(); //echo $class::getNome(); --> "contorno" echo static::getNome(); // late static binding } } class Filha extends Mae { static function getNome() { return 'Filha'; } }
  8. Exceções aninhadas <?php function atualizar() { try { $connection =

    $this->getDbConnection(); return $connection->query("UPDATE x SET foo = bar"); } catch (Exception $excecaoAnterior) { throw new Exception("Erro ao atualizar", 500, $excecaoAnterior); } }
  9. • Traits (“característica”, “peculiaridade”) • Setar arrays de forma mais

    fácil [] • Servidor de testes embutido • <?= sempre ativo • Desreferência de funções como array • Acesso a métodos/atributos ao instanciar • Verificar andamento de uploads Veja mais: http://www.php.net/manual/pt_BR/migration54.new-features.php Principais novidades do PHP 5.4
  10. Traits trait Singleton { // Não façam isso em casa!!!

    protected static $_instance; protected function __construct() {} public static function getInstance() { if (null === self::$_instance) { self::$_instance = new self; } return self::$_instance; } } class Registro extends ClasseMae { use Singleton; }
  11. Setar arrays de forma mais fácil // Antes $dados =

    array( array( 'nome' => 'João da Silva', 'amigos' => array('Fulano', 'Beltrano', 'Ciclano'), ) ); // Depois $dados = [ [ 'nome' => 'João da Silva', 'amigos' => ['Fulano', 'Beltrano', 'Ciclano'], ] ];
  12. Servidor de testes embutido $ php -S localhost:8080 -t /var/www/

    router.php PHP 5.5.0 Development Server started at Thu Jul 18 10:05:51 2013 Listening on http://localhost:8080 Document root is /Users/alanwillms/Sites Press Ctrl-C to quit. <?= sempre ativo <?php echo 'Algo'; ?> <? echo 'Algo'; ?> short_open_tag = Off <?= 'Algo'; ?>
  13. Desreferência de funções como array function getDados() { return ['status'

    => 469, 'mensagem' => 'Funfou!']; } echo $this->getDados()['mensagem']; Acessar métodos e atributos ao instanciar // Antes $app = new Application($config); $app->run(); // Depois (new Application($config))->run();
  14. Verificar andamento de uploads <form action="upload.php" method="POST" enctype=" multipart/form-data"> <input

    type="hidden" name="<?= ini_get( "session. upload_progress.name" ); ?>" value="meu_id" /> <input type="file" name="arquivo" /><input type="submit" /> </form> $_SESSION["upload_progress_meu_id"] = array( "start_time" => 1234567890, "content_length" => 57343257, "bytes_processed" => 453489, "done" => false, "files" => array(0 => array( "field_name" => "arquivo", "done" => true, "start_time" => 1234567890, "bytes_processed" => 57343250 // ... e dados da variável $_FILES )),
  15. • Generators • "finally" em blocos try/catch • foreach com

    list() • Desreferência de arrays e strings • empty() aceita expressões • Classe::class Veja mais: http://www.php.net/manual/pt_BR/migration55.new-features.php Principais novidades do PHP 5.5
  16. Generators public function findAllComGenerators() { // .... while ($dados =

    $statement->fetch()) yield new self($dados); } // Milhões de registros: foreach ($modelo->findAllComGenerators() as $objeto) { echo fputcsv($handler, $objeto->attributes); }
  17. Bloco finally $handler = fopen("Arquivo", "w"); try { $dados =

    $model->acaoQuePodeDarEstouro(); fwrite($handler, $dados); } catch (PdoException $e) { echo $e->getMessage(); } finally { fclose($handler); }
  18. Foreach com list() $dados = [ ['Super Mario', 'Encanador', 'Pular'],

    ['Sub Zero', 'Ninja', 'Congelar'], ['Gordon Freeman', 'Cientista', 'Atirar'], ['Bruce Wayne', 'Empresário', 'Gastar'], ]; foreach ($dados as list($nome, $profissao, $habilidade)) { echo $nome, ' é um ', $profissao, ' e pode ', $habilidade; }
  19. Desreferência de arrays e strings echo "Alguma Coisa"[2]; # g

    echo array( "nome" => "Fulano Ciclano", "idade" => 18, "hobbies" => array( "cervejada", "futebol", ), )["hobbies"][1]; # futebol
  20. empty() aceita expressões if (empty($modelo->getResposta()) { echo "Vazio"; } if

    (empty(calcula_nota($x, $y)) { echo "Vazio"; } if (empty(false)) { echo "Vazio"; }
  21. Classe::class <?php namespace Logistica\Estoque; class Unidade { public static function

    getClass() { return self::CLASS; } } echo Unidade::getClass(); # Logistica\Estoque\Unidade
  22. • Funções variádicas • Desempacotamento de argumentos • Operador de

    potência • Constantes com expressões Veja mais: http://www.php.net/manual/pt_BR/migration56.new-features.php Principais novidades do PHP 5.6
  23. <?php // Antes function query($sql) { $stmt = $this->db->query($sql); return

    $stmt>execute(array_slice(func_get_args(), 1)); } // Agora function query($sql, ...$params) { $stmt = $this->db->query($sql); return $stmt>execute($params); } Funções variádicas
  24. Operador de Potência <?php 2 ** 2 // == 4

    2 ** 3 // == 8 2 ** 4 // == 16 $numero = 2; $numero **= 4; echo $numero; // 16
  25. Constantes com expressões <?php class Produto { const DESCONTO_MINIMO =

    0.10; const DESCONTO_MAXIMO = self::DESCONTO_MINIMO + 0.05; }