SlideShare una empresa de Scribd logo
1 de 65
Descargar para leer sin conexión
PHP 5.3
  what’s new?
                   Felipe Ribeiro
                   felipernb@php.net
                   http://feliperibeiro.com
                   @felipernb
Saturday, October 31, 2009
Senta, que lá
                             vem história...




Saturday, October 31, 2009
1993




Saturday, October 31, 2009
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
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
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
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
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
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
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
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
E agora?




Saturday, October 31, 2009
E agora?


                     PHP 5.3
Saturday, October 31, 2009
Namespaces
          Closures
                                  PHAR
                       Late static binding
   Garbage collector                     goto :-(

Saturday, October 31, 2009
Lambdas e
              Closures



Saturday, October 31, 2009
Lambdas e Closures
                 <?php
                 $greet = function($name)
                 {
                     printf("Hello %srn", $name);
                 };

                 $greet('World'); //Hello World
                 $greet('PHP'); //Hello PHP
                 ?>


Saturday, October 31, 2009
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
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
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
Namespaces
Saturday, October 31, 2009
Namespaces
                               Como declarar?
                 <?php

                 namespace YahooNews;
                 class Dir {
                     ...
                 }

                 ?>




Saturday, October 31, 2009
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
Namespaces
                 <?php
                 // FooBar.php
                 namespace FooBar;

                 class Baz {
                    function __construct() {
                      echo get_called_class();
                    }
                 }
                 ?>




Saturday, October 31, 2009
Namespaces
                 <?php
                 require './FooBar.php';

                 use FooBar as FB;

                 $a = new FBBaz(); // FooBarBaz

                 ?>




Saturday, October 31, 2009
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
Namespaces




              http://php.net/namespaces
Saturday, October 31, 2009
Late static
               binding
Saturday, October 31, 2009
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
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
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
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
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
Garbage
         Collector




Saturday, October 31, 2009
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
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
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
goto




Saturday, October 31, 2009
goto


                    goto???
                             é... :-(
Saturday, October 31, 2009
goto




        *não será feita nenhuma demonstração de código por medo de
                      ataque de velociraptors no auditório.




Saturday, October 31, 2009
Momento lavagem
                 cerebral

       Repitam comigo:
     “GOTO NÃO EXISTE!”


Saturday, October 31, 2009
E AGORA VOLTAREMOS À
              PROGRAMAÇÃO NORMAL
                             COM AS NOVAS
                      FEATURES LEGAIS DO
                                PHP 5.3


Saturday, October 31, 2009
SPL
      Datastructures




Saturday, October 31, 2009
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
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
SPL Datastructures
                 • SPLHeap




                     • SPLMaxHeap
                     • SPLMinHeap
                     • SPLPriorityQueue

Saturday, October 31, 2009
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
PHAR
Saturday, October 31, 2009
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
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
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
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
Outras
           coisinhas




Saturday, October 31, 2009
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
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
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
Operador ?:
              Operador ternário
              $nome = $_GET['nome'] ? $_GET['nome'] : $valor_default;




              Operador ?:
              $nome = $_GET['nome'] ?: $valor_default;




Saturday, October 31, 2009
__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
__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
PHP 6



Saturday, October 31, 2009
PHP 6
                             Unicode
       Internacionalização

Saturday, October 31, 2009
Conclusões




Saturday, October 31, 2009
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
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
<?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
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

Más contenido relacionado

La actualidad más candente

Python: Iteraveis, geradores etc
Python: Iteraveis, geradores etcPython: Iteraveis, geradores etc
Python: Iteraveis, geradores etc
Luciano Ramalho
 

La actualidad más candente (19)

Python 02
Python 02Python 02
Python 02
 
Introdução ao Shell Script (versão estendida)
Introdução ao Shell Script (versão estendida)Introdução ao Shell Script (versão estendida)
Introdução ao Shell Script (versão estendida)
 
Python 04
Python 04Python 04
Python 04
 
Python: Iteraveis, geradores etc
Python: Iteraveis, geradores etcPython: Iteraveis, geradores etc
Python: Iteraveis, geradores etc
 
Agenda em bash e dialog
Agenda em bash e dialogAgenda em bash e dialog
Agenda em bash e dialog
 
Perl Moderno, dia3
Perl Moderno, dia3Perl Moderno, dia3
Perl Moderno, dia3
 
Iteraveis e geradores
Iteraveis e geradoresIteraveis e geradores
Iteraveis e geradores
 
Shell script
Shell scriptShell script
Shell script
 
Proxy, Man-In-The-Middle e testes
Proxy, Man-In-The-Middle e testesProxy, Man-In-The-Middle e testes
Proxy, Man-In-The-Middle e testes
 
Python 01
Python 01Python 01
Python 01
 
Iteraveis e geradores em Python
Iteraveis e geradores em PythonIteraveis e geradores em Python
Iteraveis e geradores em Python
 
Minicurso Shell Script
Minicurso Shell ScriptMinicurso Shell Script
Minicurso Shell Script
 
Usando melhor as Collections
Usando melhor as CollectionsUsando melhor as Collections
Usando melhor as Collections
 
Implementação de Aplicações Móveis e Jogos com Python - Aula 5
Implementação de Aplicações Móveis e Jogos com Python - Aula 5Implementação de Aplicações Móveis e Jogos com Python - Aula 5
Implementação de Aplicações Móveis e Jogos com Python - Aula 5
 
Implementação de Aplicações Móveis e Jogos com Python - Aula 4
Implementação de Aplicações Móveis e Jogos com Python - Aula 4Implementação de Aplicações Móveis e Jogos com Python - Aula 4
Implementação de Aplicações Móveis e Jogos com Python - Aula 4
 
Programando Melhor - Flisol
Programando Melhor - FlisolProgramando Melhor - Flisol
Programando Melhor - Flisol
 
Gerando bindings de bibliotecas C++ para Python
Gerando bindings de bibliotecas C++ para PythonGerando bindings de bibliotecas C++ para Python
Gerando bindings de bibliotecas C++ para Python
 
Orientação a Objetos em PHP
Orientação a Objetos em PHPOrientação a Objetos em PHP
Orientação a Objetos em PHP
 
Design de código: princípios e práticas para ter um código sustentável
Design de código: princípios e práticas para ter um código sustentávelDesign de código: princípios e práticas para ter um código sustentável
Design de código: princípios e práticas para ter um código sustentável
 

Similar a PHP 5.3 - What's new?

(03) shell e comandos basicos[1]
(03) shell e comandos basicos[1](03) shell e comandos basicos[1]
(03) shell e comandos basicos[1]
Anderson Lago
 
Principais comandos do terminal no linux tecnologia para todos!
Principais comandos do terminal no linux   tecnologia para todos!Principais comandos do terminal no linux   tecnologia para todos!
Principais comandos do terminal no linux tecnologia para todos!
Fábio Fernando
 
PHP, Gearman e Memcache
PHP, Gearman e MemcachePHP, Gearman e Memcache
PHP, Gearman e Memcache
Andre Golvea
 

Similar a PHP 5.3 - What's new? (20)

Doctrine2 Seminário PHP
Doctrine2 Seminário PHPDoctrine2 Seminário PHP
Doctrine2 Seminário PHP
 
Ao infinito e além com PHP memcached e Gearman
Ao infinito e além com PHP memcached e GearmanAo infinito e além com PHP memcached e Gearman
Ao infinito e além com PHP memcached e Gearman
 
Linux shell
Linux shellLinux shell
Linux shell
 
Migrando para o PHP 5
Migrando para o PHP 5Migrando para o PHP 5
Migrando para o PHP 5
 
Doctrine for Dummies
Doctrine for DummiesDoctrine for Dummies
Doctrine for Dummies
 
(03) shell e comandos basicos[1]
(03) shell e comandos basicos[1](03) shell e comandos basicos[1]
(03) shell e comandos basicos[1]
 
PHP fora da Web
PHP fora da WebPHP fora da Web
PHP fora da Web
 
PHPSP TestFest 2009
PHPSP TestFest 2009PHPSP TestFest 2009
PHPSP TestFest 2009
 
Principais comandos do terminal no linux tecnologia para todos!
Principais comandos do terminal no linux   tecnologia para todos!Principais comandos do terminal no linux   tecnologia para todos!
Principais comandos do terminal no linux tecnologia para todos!
 
5 Maneiras de melhorar seu código PHP
5 Maneiras de melhorar seu código PHP5 Maneiras de melhorar seu código PHP
5 Maneiras de melhorar seu código PHP
 
PHP 7
PHP 7PHP 7
PHP 7
 
PHP Experience 2016 - [Palestra] Keynote: PHP-7
PHP Experience 2016 - [Palestra] Keynote: PHP-7PHP Experience 2016 - [Palestra] Keynote: PHP-7
PHP Experience 2016 - [Palestra] Keynote: PHP-7
 
PHP, Gearman e Memcache
PHP, Gearman e MemcachePHP, Gearman e Memcache
PHP, Gearman e Memcache
 
Git, GitHub e OO
Git, GitHub e OOGit, GitHub e OO
Git, GitHub e OO
 
Shell Scipt - Comandos
Shell Scipt - ComandosShell Scipt - Comandos
Shell Scipt - Comandos
 
Desenvolvendo Extensões PECL
Desenvolvendo Extensões PECLDesenvolvendo Extensões PECL
Desenvolvendo Extensões PECL
 
Bash, o poder da linha de comando! - Tchelinux.org 2017
Bash, o poder da linha de comando! - Tchelinux.org 2017Bash, o poder da linha de comando! - Tchelinux.org 2017
Bash, o poder da linha de comando! - Tchelinux.org 2017
 
Removendo o cheiro ruim do seu código - PHPSC Conf 2011
Removendo o cheiro ruim do seu código - PHPSC Conf 2011Removendo o cheiro ruim do seu código - PHPSC Conf 2011
Removendo o cheiro ruim do seu código - PHPSC Conf 2011
 
Introdução a Linguagem de Programação Ruby
Introdução a Linguagem de Programação RubyIntrodução a Linguagem de Programação Ruby
Introdução a Linguagem de Programação Ruby
 
Linux - Shell e Comandos Básicos
Linux - Shell e Comandos BásicosLinux - Shell e Comandos Básicos
Linux - Shell e Comandos Básicos
 

Más de Felipe Ribeiro (7)

PHP RESTful Web Services - PHPConf'09
PHP RESTful Web Services - PHPConf'09PHP RESTful Web Services - PHPConf'09
PHP RESTful Web Services - PHPConf'09
 
SPL Datastructures
SPL DatastructuresSPL Datastructures
SPL Datastructures
 
Otimizacao de websites em PHP
Otimizacao de websites em PHPOtimizacao de websites em PHP
Otimizacao de websites em PHP
 
Software livre e padrões abertos no desenvolvimento Web
Software livre e padrões abertos no desenvolvimento WebSoftware livre e padrões abertos no desenvolvimento Web
Software livre e padrões abertos no desenvolvimento Web
 
PHP Jedi - Boas Práticas e Alta Performance
PHP Jedi - Boas Práticas e Alta PerformancePHP Jedi - Boas Práticas e Alta Performance
PHP Jedi - Boas Práticas e Alta Performance
 
PHP RESTful Web Services
PHP RESTful Web ServicesPHP RESTful Web Services
PHP RESTful Web Services
 
PHP para aplicações Web de grande porte
PHP para aplicações Web  de grande portePHP para aplicações Web  de grande porte
PHP para aplicações Web de grande porte
 

Último

Último (9)

ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docxATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object Calisthenics
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docxATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx
 
Luís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdfLuís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdf
 
Programação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdfProgramação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdf
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemplo
 

PHP 5.3 - What's new?

  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 60. PHP 6 Unicode Internacionalização 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