Aprofunde se no php 5.3

1.920 visualizações

Publicada em

0 comentários
3 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

Sem downloads
Visualizações
Visualizações totais
1.920
No SlideShare
0
A partir de incorporações
0
Número de incorporações
30
Ações
Compartilhamentos
0
Downloads
32
Comentários
0
Gostaram
3
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Aprofunde se no php 5.3

  1. 1. APROFUNDE-SE NO PHP 5.3 Marcus Vinicius Bastos Leandro http://www.phpnaveia.com.br
  2. 2. Você já está usando o PHP 5.3?
  3. 3. Um breve histórico  PHP 5.0 implementou um novo modelo de objetos  PHP 5.3 nos presenteou com: namespaces, clousures, late static binding, etc...  PHP 6 ?...
  4. 4. Por que migrar para o PHP 5.3?  Mais rápido  Melhor gerenciamento de memória  Bug fixes  Zend Framework 2.0, Symfony 2.0, Doctrine 2.0 vão requerer o PHP 5.3
  5. 5. Definição de Classes <?php namespace SystemControl; class UserController {} $uc = new SystemControlUserController(); $uc2 = new UserController(); //mesma classe da declaração anterior
  6. 6. Definição de funções <?php namespace SystemControl; function hello(){ return “Hello”; } echo SystemControlhello(); //Hello echo hello(); //Hello
  7. 7. Usando Classes de outro Namespace <?php namespace ZendSignalSlot { class Signals{} } namespace{ //global use ZendSignalSlotSignals; $signals = new Signals(); }
  8. 8. Alterando o nome <?php namespace SquirrelCore{ class Site{} } namespace{ use SquirrelCoreSite as SquirrelSite; $squirrelSite = new SquirrelSite(); }
  9. 9. Chamada Global <?php namespace Doctrine{ class Manager{ public static function load() { } } } namespace{ DoctrineManager::load(); }
  10. 10. Late Static Binding
  11. 11. O problema
  12. 12. Classe Mãe <?php class Foo{ protected static function speak(){ return “Hi”; } public static function sayHi(){ return self::speak(); } }
  13. 13. Classe Filha <?php class Bar extends Foo{ protected static function speak(){ return “Hello”; } }
  14. 14. “Hi” ou “Hello” ? <?php echo Bar::sayHi();
  15. 15. “Hi” ou “Hello” ? <?php echo Bar::sayHi(); //Hi
  16. 16. A solução
  17. 17. Classe Mãe <?php class Foo{ protected static function speak(){ return “Hi”; } public static function sayHi(){ return static::speak(); } }
  18. 18. Classe Filha <?php class Bar extends Foo{ protected static function speak(){ return “Hello”; } }
  19. 19. “Hi” ou “Hello” <?php echo Bar::sayHi(); //Hello
  20. 20. Clousures / Lambdas
  21. 21. Atribuindo a variáveis <?php $sayHi = function(){ return “Hi”; } echo $sayHi();
  22. 22. Escopo <?php $saudacao = 'Olá'; $falar = function ( $nome ) use ($saudacao){ return $saudacao . ' ' . $nome; } echo $falar('Marcus'); //Olá Marcus
  23. 23. Funções anônimas <?php function processaAlgo( $valor, $callback ){ … $callback(); } processaAlgo( 10, function(){ echo “Processado ...”; } );
  24. 24. Phar ( PHP Archive )  Distribuindo aplicações em um único arquivo
  25. 25. Criando arquivos Phar <?php $phar = new Phar( '/projeto/app.phar', //caminho para o arquivo 0, //parâmetros 'app.phar' //Alias para referências ); $phar->startBuffering();
  26. 26. Adicionando arquivos <?php $phar->addFile( “/projeto/header.php” ); $phar->addFile( “/projeto/funcoes.php”, “/lib/global.php” );
  27. 27. Adicionando arquivos – outra forma <?php $phar['index.php'] = file_get_contents( '/projeto/index.php' ); $phar['header.php'] = '<h1>Header</h1>';
  28. 28. Adicionando arquivos de um diretório <?php $phar->buildFromDirectory( '/projeto', '/.php/' );
  29. 29. Stub  O arquivo Stub é um pedaço de código que será executado quando o arquivo Phar for carregado. Para definir o pedaço de código que será executado ao carregar o arquivo Phar pode-se usar o método setStub que aceita o código em forma de string.
  30. 30. Stub <?php $phar->setStub('<?php Phar::mapPhar(); include "phar://app.phar/index.php"; __HALT_COMPILER(); ?>');
  31. 31. Stub  O código deve terminar com a função __HALT_COMPILER().  O método statico Phar::mapPhar() lê e inicializa o arquivo Phar a ser executado.  O streammer phar:// é usado para referenciar os arquivos que estão dento do pacote Phar. No exemplo anterior ao carregar o arquivo app.phar será executado o arquivo index.php.
  32. 32. Stub  Caso não exista nenhum procedimento especial ao carregar o arquivo Phar, e você deseja simplesmente executar um arquivo php diretamente, use o método createDefaultStub. É só passá-lo como parâmetro para o método setStub.
  33. 33. Stub <?php $phar->setStub($p- >createDefaultStub( 'index.php' ) );
  34. 34. Exemplo completo  index.php <?php echo “Olá mundo”; ?>
  35. 35. Script para criar o Phar  criaPhar.php <?php $p = new Phar('teste.phar', 0, 'teste.phar'); $p->startBuffering(); $p['index.php'] = file_get_contents("index.php"); // $p->addFile('index.php'); - segunda opção para incluir arquivos. $p->setStub($p->createDefaultStub('index.php')); $p->stopBuffering();
  36. 36. Criando o phar # php criaPhar.php  Após a execução do script acima será criado o arquivo teste.phar
  37. 37. Executando o Phar # php teste.phar  A saída da execução será: Olá Mundo
  38. 38. E tem mais...  Funções de internacionalização  SQLite versão 3  FileInfo: mime-type, encoding - http://www.php.net/manual/en/ref.fileinfo.php
  39. 39. DateTime Object  Adicionar o subtrair datas  Calcular a diferença entre duas datas  Definir/recuperar unix timestamp  http://www.brandonsavage.net/cool-datetime- functions-in-php-5-3/
  40. 40. Novas estruturas SPL
  41. 41. SPL Stack  Push e Pop  Last in, First Out (LIFO)  Usa menos memória do que arrays para grandes pilhas ( mais que 5.000 elementos )
  42. 42. SPLQueue  Enqueue & Dequeue  First in, First Out (FIFO)  Mais rápida e usa menos memória que arrays
  43. 43. SPLHeap  Insert & Remove  Reordena elementos baseado em comparações  Mais rápido e usa menos memória que arrays
  44. 44. Veja mais em http://matthewturland.com/2010/05/20/new-spl- features-in-php-5-3/
  45. 45. GOTO  Essa parte pula
  46. 46. Nova sintaxe
  47. 47. __invoke() <?php class Foo{ public function __invoke($x){ return $x + $x; } } $foo = new Foo(); echo $foo(2); //4
  48. 48. __callStatic() <?php class Foo{ public static function __callStatic( $name, $args ){ return $name . ' foi chamada estaticamente'; } } echo Foo::bar(); //bar foi chamada //estaticamente
  49. 49. __DIR__ <?php echo dirname(__FILE__); echo __DIR__;
  50. 50. Novo ternário <?php $user->setApelido('mvleandro'); $apelido = $user->getApelido()?:'Não informado'; echo $apelido; //mvleandro
  51. 51. Referência  PHP Manual – http://php.net/  Bradley Holt – http://bradley-holt.com/  PHP Brasil - http://phpbrasil.com/
  52. 52. Perguntas?
  53. 53. Obrigado Marcus Vinicius Bastos Leandro http://www.phpnaveia.com.br Twitter: @mvleandro E-mail: mvleandro@gmail.com MSN: marcus_leandro@hotmail.com Cel: (21)-8211-9096

×