PHP 5.3 - What's new?

Loading...

Flash Player 9 (or above) is needed to view presentations.
We have detected that you do not have it on your computer. To install it, go here.

0 comments

Post a comment

    Post a comment
    Embed Video
    Edit your comment Cancel

    1 Favorite & 1 Event

    PHP 5.3 - What's new? - Presentation Transcript

    1. PHP 5.3 what’s new? Felipe Ribeiro felipernb@php.net http://feliperibeiro.com @felipernb Saturday, October 31, 2009
    2. Senta, que lá vem história... Saturday, October 31, 2009
    3. 1993 Saturday, October 31, 2009
    4. 1993 <HTML> <HEAD> <TITLE>My Personal Home Page</TITLE> </HEAD> <BODY> This is my cool page<P> And look at my counter<P> <IMG SRC="/cgi-bin/counter.pl"> </BODY> </HTML> Saturday, October 31, 2009
    5. PHP/FI <!--getenv HTTP_USER_AGENT--> <!--ifsubstr $exec_result Mozilla--> Hey, you are using Netscape!<p> <!--endif--> <!--sql database select * from table where user='$username'--> <!--ifless $numentries 1--> Sorry, that record does not exist<p> <!--endif exit--> Welcome <!--$user-->!<p> You have <!--$index:0--> credits left in your account.<p> <!--include /text/footer.html--> Saturday, October 31, 2009
    6. PHP/FI • PHP/FI = Personal Home Page/Forms Interpreter • Um conjunto de bibliotecas C/Perl e uma linguagem de template que interagia com elas • GPL • Estimava-se que estava presente em 1% dos domínios existentes em 1997 Saturday, October 31, 2009
    7. PHP 3 <? $name = "bob"; $db = "db"; $result = msql($db,"select * from table where firstname='$name'"); $num = msql_numrows($result); echo "$num records found!<p>"; $i=0; while($i<$num); echo msql_result($result,$i,"fullname"); echo "<br>"; echo msql_result($result,$i,"address"); echo "<br>"; $i++; endwhile; ?> Saturday, October 31, 2009
    8. PHP 3 • PHP = PHP Hypertext Preprocessor • Rasmus Lerdorf, Andi Gutmans e Zeev Suraski • Extensível, suporte a vários SGBDs, servidores Web e protocolos. • Sintaxe mais poderosa • Estima-se que estava presente em 10% dos domínios em 1998 Saturday, October 31, 2009
    9. PHP 4 • Core completamente reescrito por Andi Gutmans e Zeev Suraski (Zend Engine) visando: • Melhor performance • Melhor modularização • Suporte a sessões, “superglobais” $_GET, $_POST, $_SESSION e etc... • Estima-se que em 2004 estava presente em mais de 20% dos domínios existentes Saturday, October 31, 2009
    10. PHP 5 <?php class SimpleClass { private $attribute; public function foo($bar) { echo $this->attribute * $bar; } } class ExtendedClass extends SimpleClass { public function foo($bar) { try { do_something(); } catch(FooBarException $e) { die($e->getMessage()); } parent::foo($bar); } } $o = new ExtendedClass; $o->foo(); ?> Saturday, October 31, 2009
    11. PHP 5 • Zend Engine II com novo modelo de objetos • Interfaces • Exceções • Níveis de visibilidade (public, private, protected) • SPL • Tratamento de XML • 5.1 - Melhorias de performance • 5.2 - Extensão “filter” habilitada por padrão Saturday, October 31, 2009
    12. E agora? Saturday, October 31, 2009
    13. E agora? PHP 5.3 Saturday, October 31, 2009
    14. Namespaces Closures PHAR Late static binding Garbage collector goto :-( Saturday, October 31, 2009
    15. Lambdas e Closures Saturday, October 31, 2009
    16. Lambdas e Closures <?php $greet = function($name) {     printf("Hello %srn", $name); }; $greet('World'); //Hello World $greet('PHP'); //Hello PHP ?> Saturday, October 31, 2009
    17. Lambdas e Closures $comparador = function($x,$y) { if($x->idade == $y->idade) return 0; return($x->idade < $y->idade) ? -1 : 1; }; usort($array, $comparador); /*Array ( [0] => stdClass Object ( [nome] => b [idade] => 14 ) [1] => stdClass Object ( [nome] => a [idade] => 22 ) ) */ Saturday, October 31, 2009
    18. Lambdas e Closures function getSomador($x) {     return function ($y) use ($x) {         return $x + $y;     }; } $somador = getSomador(10); echo $somador(5); //15 echo $somador(32); //42 Saturday, October 31, 2009
    19. Lambdas e Closures • Permitem a criação de funções mais flexíveis • Closure é uma lambda que tem variáveis obtidas do escopo em que foi declarada. • Não é novidade do PHP. • Ruby, Python, Javascript, entre outras linguagens, já têm esse recurso. • http://php.net/closures Saturday, October 31, 2009
    20. Namespaces Saturday, October 31, 2009
    21. Namespaces Como declarar? <?php namespace YahooNews; class Dir {     ... } ?> Saturday, October 31, 2009
    22. Namespaces Como usar? <?php // usando diretamente $foo = new YahooNewsDir(); // importando o namespace use YahooNews; $foo = new NewsDir(); // renomeando a classe use YahooNewsDir as YND; $foo = new YND(); ?> Saturday, October 31, 2009
    23. Namespaces <?php // FooBar.php namespace FooBar; class Baz { function __construct() { echo get_called_class(); } } ?> Saturday, October 31, 2009
    24. Namespaces <?php require './FooBar.php'; use FooBar as FB; $a = new FBBaz(); // FooBarBaz ?> Saturday, October 31, 2009
    25. Namespaces • O (polêmico) separador (backslash) • A primeira escolha foi o ::, mas geraria confusão com o atual uso para chamadas estáticas... • A escolha: • Critérios • type-ability • typo-vulnerability • parse-ability • IDE compatibility • number of chars Saturday, October 31, 2009
    26. Namespaces http://php.net/namespaces Saturday, October 31, 2009
    27. Late static binding Saturday, October 31, 2009
    28. Late static binding <?php abstract class ActiveRecord { public function save() { $sql = "INSERT INTO ". self::TABLE. "..."; } ... } class Post extends ActiveRecord { const TABLE = 'posts'; ... } $p = new Post(); ... $p->save(); Saturday, October 31, 2009
    29. Late static binding <?php abstract class ActiveRecord { public function save() { $sql = "INSERT INTO ". self::TABLE. "..."; } ... } class Post extends ActiveRecord { A ! const TABLE = 'posts'; IO N ... N C FU } O NÃ $p = new Post(); ... $p->save(); Saturday, October 31, 2009
    30. Late static binding <?php abstract class ActiveRecord { public function save() { $sql = "INSERT INTO ". static::TABLE. "..."; } ... } class Post extends ActiveRecord { const TABLE = 'posts'; ... } $p = new Post(); ... $p->save(); // FUNCIONA Saturday, October 31, 2009
    31. Late static binding <?php class A { public static function who() { echo __CLASS__; } public static function test() { self::who(); // PHP < 5.3 - Output: A static::who(); // LSB - Output: The class that extends and is called } } class B extends A { public static function who() { echo __CLASS__; } } B::test(); // AB ?> Saturday, October 31, 2009
    32. Late static binding • Late Static Binding permite referenciar a classe chamada, no contexto de herança estática. • http://php.net/lsb Saturday, October 31, 2009
    33. Garbage Collector Saturday, October 31, 2009
    34. Garbage Collector • O garbage collector do PHP funciona por contagem de referências • Quando o número de referências para um objeto é zero, ele é removido da memória. • Isso era um problema para casos de referências circulares • O Garbage Collector do PHP 5.3 trata esses casos Saturday, October 31, 2009
    35. Garbage Collector class Parent { public function __construct() { $this->child = new Child($this); } } class Child { public function __construct( Parent $parent ) { $this->parent = $parent; } } Saturday, October 31, 2009
    36. MINISTÉRIO DA SAÚDE ADVERTE Os próximos slides são contra- indicados para gestantes, pessoas com mais de 65 anos ou com problemas de coração. Saturday, October 31, 2009
    37. goto Saturday, October 31, 2009
    38. goto goto??? é... :-( Saturday, October 31, 2009
    39. goto *não será feita nenhuma demonstração de código por medo de ataque de velociraptors no auditório. Saturday, October 31, 2009
    40. Momento lavagem cerebral Repitam comigo: “GOTO NÃO EXISTE!” Saturday, October 31, 2009
    41. E AGORA VOLTAREMOS À PROGRAMAÇÃO NORMAL COM AS NOVAS FEATURES LEGAIS DO PHP 5.3 Saturday, October 31, 2009
    42. SPL Datastructures Saturday, October 31, 2009
    43. SPL Datastructures • Nas versões anteriores, toda coleção era tratada como um Array. • O Array do PHP funciona como uma tabela hash, que associa chaves e valores, onde as chaves podem ser nºs inteiros (sequenciais ou não) ou strings. • O Array tem tamanho dinâmico e é ajustado de acordo com a demanda • Algumas funções permitiam simular pilhas (array_push e array_pop) e filas (array_shift e array_unshift) com Arrays Saturday, October 31, 2009
    44. SPL Datastructures • SPLDoublyLinkedList • Adição, remoção, acesso à cabeça e à cauda em O(1) • Usado na implementação de: • SPLStack • LIFO • SPLQueue • FIFO Saturday, October 31, 2009
    45. SPL Datastructures • SPLHeap • SPLMaxHeap • SPLMinHeap • SPLPriorityQueue Saturday, October 31, 2009
    46. SPL Datastructures • SPLFixedArray • Diferenças do array convencional: • Os índices precisam ser inteiros e sequenciais • O tamanho é estático • Isso traz ganhos de performance, pois facilita a alocação de memória, iteração e o “seek”. • SPLObjectStorage • Mapa (key-value) • Pode servir também como um Set de objetos (chaves sem valor) Saturday, October 31, 2009
    47. PHAR Saturday, October 31, 2009
    48. PHAR • PHAR é para o PHP o que JAR é para o Java • PHAR pode transformar vários arquivos em um só • Facilita a distribuição e execução de aplicações como um único arquivo • PHAR “entende” os formatos ZIP, TAR e PHAR • Pode ser manipulado através do Stream Wrapper phar:// • Você pode manipular os arquivos da mesma maneira que faz diretamente no sistema de arquivos de maneira transparente Saturday, October 31, 2009
    49. PHAR Existem várias maneiras de se usar um PHAR Executando em php-cli $ php aplicacao.phar <?php include 'biblioteca.phar'; include 'phar://biblioteca2.phar/ arquivo.php'; ?> Saturday, October 31, 2009
    50. PHAR <?php //Criando um PHAR $phar = new Phar('pacote.phar'); //Cria um arquivo hello.txt dentro do PHAR com o conteúdo atribuído $phar['hello.txt'] = "Hello World"; //Lendo um PHAR echo file_get_contents('phar://pacote.phar/ hello.txt'); ?> Saturday, October 31, 2009
    51. PHAR • Todo PHAR deve conter três (ou quatro) seções 1. Um stub 2. Um manifest descrevendo o conteúdo 3. Os arquivos propriamente ditos 4. [opcional] uma assinatura de verificação de integridade do PHAR Saturday, October 31, 2009
    52. Outras coisinhas Saturday, October 31, 2009
    53. Outras coisinhas • Suporte em Windows foi melhorado • Adicionado o nível de erro E_DEPRECATED • SPL não pode mais ser desabilitado • Pyrus, o novo instalador do PEAR • NOWDOC • Operador ?: • __callStatic() • Constante __DIR__ • Bugfixes, bugfixes e bugfixes Saturday, October 31, 2009
    54. NOWDOC <?php $nome = "Felipe"; $heredoc = <<<TEXTO Meu nome é $nome TEXTO; echo $heredoc; // Meu nome é Felipe $nowdoc = <<<'TEXTO' Meu nome é $nome TEXTO; echo $nowdoc; // Meu nome é $nome Saturday, October 31, 2009
    55. NOWDOC • NOWDOC está para HEREDOC assim como aspa simples está para aspas duplas • Variáveis não são avaliadas dentro da expressão Saturday, October 31, 2009
    56. Operador ?: Operador ternário $nome = $_GET['nome'] ? $_GET['nome'] : $valor_default; Operador ?: $nome = $_GET['nome'] ?: $valor_default; Saturday, October 31, 2009
    57. __callStatic() • __call() trata chamadas de métodos de instância que não foram explicitamente declarados • __callStatic() é o equivalente para chamadas estáticas Saturday, October 31, 2009
    58. __DIR__ • includes dentro de includes podem ser um problema se você usa path relativo • para se saber o path absoluto do arquivo atual, de maneira dinâmica, usava-se dirname(__FILE__) • para evitar essa chamada de função, PHP5.3 já traz essa informação na constante __DIR__ Saturday, October 31, 2009
    59. PHP 6 Saturday, October 31, 2009
    60. PHP 6 Unicode Internacionalização Saturday, October 31, 2009
    61. Conclusões Saturday, October 31, 2009
    62. Conclusões • A “concorrência” fez muito bem ao PHP, pois deixou a sua comunidade mais exigente • As mudanças do PHP 5.3 continuam fazendo jus ao “PHP way”: nem sempre bonito, mas sempre prático e eficiente. • PHP ainda paga caro pelas más escolhas do passado Saturday, October 31, 2009
    63. Conclusões • PHP 5.3 provocará, logo logo, uma nova leva de versões de frameworks (incompatíveis com as anteriores) • Zend Framework 2.0 usará namespaces ao invés da convenção atual • Symfony 2.0, Cake 2.0,... Saturday, October 31, 2009
    64. <?php echo("Dúvidas?"); $contato = array( "nome" => "Felipe Ribeiro", "email" => "felipernb@php.net", "blog" => "http://feliperibeiro.com", "twitter" => "@felipernb"); var_dump($contato); ?> Saturday, October 31, 2009
    65. Referências • PHP (http://talks.php.net/show/pdxphp09)- Rasmus Lerdorf • http://php.net/history • http://php.net/closures • http://php.net/lsb • http://php.net/namespaces • http://php.net/goto • http://php.net/spl • http://stackoverflow.com/questions/220658/what-is-the-difference-between-a- closure-and-a-lambda • http://www.ibm.com/developerworks/opensource/library/os-php-5.3new1/ index.html • http://php.net/ChangeLog-5.php#5.3.0 Saturday, October 31, 2009

    + Felipe RibeiroFelipe Ribeiro, 3 weeks ago

    custom

    639 views, 1 favs, 3 embeds more stats

    Apresentação feita por mim no 3º Encontro PHP-PB more

    More info about this document

    CC Attribution-NonCommercial-NoDerivs LicenseCC Attribution-NonCommercial-NoDerivs LicenseCC Attribution-NonCommercial-NoDerivs License

    Go to text version

    • Total Views 639
      • 490 on SlideShare
      • 149 from embeds
    • Comments 0
    • Favorites 1
    • Downloads 30
    Most viewed embeds
    • 99 views on http://blog.feliperibeiro.com
    • 49 views on http://www.andafter.org
    • 1 views on http://feeds.feedburner.com

    more

    All embeds
    • 99 views on http://blog.feliperibeiro.com
    • 49 views on http://www.andafter.org
    • 1 views on http://feeds.feedburner.com

    less

    Flagged as inappropriate Flag as inappropriate
    Flag as inappropriate

    Select your reason for flagging this presentation as inappropriate. If needed, use the feedback form to let us know more details.

    Cancel
    File a copyright complaint
    Having problems? Go to our helpdesk?

    Categories

    Groups / Events