SlideShare une entreprise Scribd logo
1  sur  56
Télécharger pour lire hors ligne
Novas Funcionalidades no PHP 5.3
            Douglas V. Pasqua
          Zend Certified Engineer
        douglas.pasqua@gmail.com




                           http://dpasqua.wordpress.com
Objetivo
Conhecer as principais funcionalidades incluídas no PHP
 5.3
Exemplos de códigos PHP das novas funcionalidades
Melhores práticas de programação ao se trabalhar com os
 novos recursos




                                   http://dpasqua.wordpress.com
Tópicos
Namespaces
Static Late Bindings
Lambda e Closures
Arquivos Phar
mysqlnd – MySQL Native Driver
Outras melhorias




                                 http://dpasqua.wordpress.com
Namespaces – Características
Agrupar classes, funções e constantes em pacotes
 (namespaces)
Possibilita mais de um classe/função/constante com o
 mesmo nome, porém em diferentes namespaces
Diminui o número de prefixos usados nos nomes das
 classes/funções e constantes
Deixa o código mais limpo e legível




                                       http://dpasqua.wordpress.com
Namespaces – Definição
Determinando um namespace para um arquivo PHP
A diretiva namespace deve ser declarada antes de qualquer
 outro código php ou caractéres na saída padrão

  <?php
  namespace exemplo;




                                   http://dpasqua.wordpress.com
Namespaces – Exemplo
Arquivo UsuarioBlog.php
  <?php
  namespace Blog;

  class Usuario {
  private $nome;

  public function setNome ($nome) {
     $this->nome = $nome;
  }

  public function getNome() {
     return "Usuário Atual do Blog é " . $this->nome;
  }
  }




                                      http://dpasqua.wordpress.com
Namespaces – Exemplo
Arquivo UsuarioCms.php
  <?php
  namespace Cms;

  class Usuario {
  private $nome;

  public function setNome ($nome) {
     $this->nome = $nome;
  }

  public function getNome() {
     return "Usuário Atual do Cms é " . $this->nome;
  }
  }




                                      http://dpasqua.wordpress.com
Namespaces – Exemplo
Acessando as classes “Usuario” de acordo com o
 namespace.
  // incluíndo os arquivos das classes 'Usuarios'
  require_once("UserBlog.php");
  require_once("UserCms.php");




                                    http://dpasqua.wordpress.com
Namespaces – Exemplo
Acessando as classes “Usuario” de acordo com o
 namespace.
  // incluíndo os arquivos das classes 'Usuarios'
  require_once("UserBlog.php");
  require_once("UserCms.php");

  // Instancinado a classe Usuario no namespace Blog
  $usuario = new BlogUsuario();
  $usuario->setNome("Douglas");
  echo $usuario->getNome() . PHP_EOL;
  // Usuário Atual do Blog é Douglas




                                    http://dpasqua.wordpress.com
Namespaces – Exemplo
Acessando as classes “Usuario” de acordo com o
 namespace.
  // incluíndo os arquivos das classes 'Usuarios'
  require_once("UserBlog.php");
  require_once("UserCms.php");

  // Instancinado a classe Usuario no namespace Blog
  $usuario = new BlogUsuario();
  $usuario->setNome("Douglas");
  echo $usuario->getNome() . PHP_EOL;
  // Usuário Atual do Blog é Douglas

  // Instancinado a classe Usuario no namespace Cms
  $usuario1 = new CmsUsuario();
  $usuario1->setNome("Douglas");
  echo $usuario1->getNome() . PHP_EOL;
  // Usuário Atual do Cms é Douglas


                                    http://dpasqua.wordpress.com
Namespaces – Utilizando
Nome qualificado absoluto
  $a = new BlogUsuario();
  $b = new CmsUsuario();




                              http://dpasqua.wordpress.com
Namespaces – Utilizando
Nome qualificado absoluto
  $a = new BlogUsuario();
  $b = new CmsUsuario();


Nome não-qualificado
  namespace Blog;
  $a = new Usuario();   // BlogUsuario




                                     http://dpasqua.wordpress.com
Namespaces – Utilizando
Nome qualificado absoluto
  $a = new BlogUsuario();
  $b = new CmsUsuario();


Nome não-qualificado
  namespace Blog;
  $a = new Usuario();   // BlogUsuario


Nome qualificado relativo

  namespace Empresa;
  $a = new BlogUsuario(); // EmpresaBlogUsuario
  // Erro pois classe não existe neste namespace



                                     http://dpasqua.wordpress.com
Namespaces – Import e Alias
A finalidade do Alias é criar um nome mais curto para
 referenciar um elemento
A palavra-chave para import e alias é “use”

  use BlogUsuario as BlogUsuario;
  use CmsUsuario;

  $u1 = new BlogUsuario(); // alias referenciando
  BlogUsuario();
  $u2 = new Usuario(); // alias referenciando
  CmsUsuario();

  $u3 = new BlogUsuario(); // FQN não são afetados por
  Alias e import




                                      http://dpasqua.wordpress.com
Namespaces – Espaço Global
A classe/função/constante pertencem ao namespace
 “global” quando não for especificado nenhuma namespace
  <?php
  class Usuario {
        private $nome;

        public function setNome ($usuario) {
            $this->nome = $usuario;
        }

        public function getNome() {
            return "Usuário Atual Global é " . $this->nome;
        }
  }




                                    http://dpasqua.wordpress.com
Namespaces – Espaço Global
Quando pretendemos usar um elemento definido no espaço
 global, utiliza o prefixo “” seguido pelo nome do elemento

  $usuario = new Usuario();
  $usuario->setNome("Douglas");
  echo $usuario->getNome(); // Usuário Atual Global é
  Douglas




                                    http://dpasqua.wordpress.com
Namespaces
Além de classes, namespaces se aplicam para funções e
 constantes

  <?php
  namespace ABC;
  const TESTCONST = true;

  // função fopen no namespace ABC
  function fopen() {
  // chamando a função Global fopen
     $f = fopen(...);
      // constante no namespace ABC
      return TESTCONST;
  }




                                    http://dpasqua.wordpress.com
Namespaces __NAMESPACE__
A constante __NAMESPACE__ contém o nome da
 namespace corrente
No namespace “Global” a constante terá o valor “vazio”
Além da constante __NAMEPSACE__ existe a palavra-chave
 “namespace” que pode ser usada para referenciar o
 namespace atual
  <?php
  namespace FooBar;
  echo __NAMESPACE__; // exibe FooBar
  namespacefunc(); // chama a função em FooBarfunc();




                                    http://dpasqua.wordpress.com
Namespaces - Múltiplos
É possível trabalhar com múltiplos namespaces em um
 mesmo arquivo
  namespace ProjetoBlog {
  const teste_constante = 1;
     class Usuario() { ... }
  }
  namespace ProjetoCms {
  const teste_constante = 1;
     class Usuario() { ... }
  }

  namespace {
  const teste_constante = 1;
     class Usuario() { ... }
  }



                                  http://dpasqua.wordpress.com
Namespaces - autoload
  É possível identificar o namespace na função de autoload
  do PHP.
 Autoload no PHP permite carregar classes dinâmicamente
 A função de autoload recebe o FQN, que inclui o namespace
<?php
$usuario = new ProjetoCmsUsuario();

function __autoload($class) {
$class = 'classes/' . str_replace('', '/', $class) . '.php';
    require_once($class);
    // classes/Projeto/Cms/Usuario.php
}




                                         http://dpasqua.wordpress.com
Late Static Bindings
Pode ser usado para referência a classe chamada (run-time)
 em um contexto de herança de método estático




                                   http://dpasqua.wordpress.com
Late Static Bindings

<?php
class A {
public static function who() {
   echo __CLASS__;
}
public static function test() {
   self::who(); // self:: referencia a classe do qual o
método test pertence
}
}

class B extends A {
public static function who() {
   echo __CLASS__;
}
}
B::test(); // Será impresso "A"   e não "B"


                                     http://dpasqua.wordpress.com
Late Static Bindings

<?php
class A {
public static function who() {
   echo __CLASS__;
}
public static function test() {
   static::who(); // static:: referencia a classe chamada
em tempo de execução
}
}

class B extends A {
public static function who() {
   echo __CLASS__;
}
}
B::test(); // Dessa vez será impresso “B”


                                    http://dpasqua.wordpress.com
Lambda e Closures
 Lambda é o mesmo que funções anônimas.
Podem ser definidas em qualquer lugar da aplicação
As funções anônimas podem ser atribuídas à uma variável
A função deixará de existir quando a variável sair fora do
 escopo
A utilização mais comum são em funções que aceitam um
 callback, como array_map, usort, etc.
É equivalente a função create_function. Lambda são mais
 rápidas e tornam o código mais limpo.
create_function é executada em run-time enquanto Lambda
 são criadas em compile-time

                                     http://dpasqua.wordpress.com
Lambda e Closures

<?php
$r = array_map(function($value) {
       return $value * 4;
   }, array(2, 4, 6, 8, 10));

print_r ($r);
?>
8
16
24
32
40




                                    http://dpasqua.wordpress.com
Lambda e Closures
<?php
$a = array(10, 4, 5 ,3 ,1);
usort($a, function($a, $b) {
          if ($a == $b) {
                 return 0;
          }
          return ($a < $b) ? -1 : 1;
});
print_r($a);
?>
Array
(
    [0] => 1
    [1] => 3
    [2] => 4
    [3] => 5
    [4] => 10
)

                                       http://dpasqua.wordpress.com
Lambda e Closures
 Closures adicionam recursos à Lambdas
Closures permite a interação de variáveis externas
A importação das variáveis externas são feitas através da
 palavra-chave “use”

  <?php
  $string = "Olá teste!";
  $closure = function() use ($string) { echo $string; };

  $closure();
  ?>

  Olá teste !




                                    http://dpasqua.wordpress.com
Lambda e Closures
Por padrão as variáveis importadas são passadas por valor
É possível passar variáveis por referência usando “&”
<?php
$a = 10;
$closure = function() use (&$a) { $a += 50; };

$closure();
var_dump ($a); // int(60)

$closure();
var_dump ($a); // int(110)

$closure();
var_dump ($a);   // int(160)



                                    http://dpasqua.wordpress.com
Lambda e Closures
Além de programação procedural, closures podem ser
 utilizados em programação orientada a objetos

 <?php
 class DebugAll {
 public function __invoke($var) {
    var_dump($var);
 }
 }
 $obj1 = new DebugAll;
 $obj1(50);
 $obj1(100);
 ?>
 int(50)
 int(100)



                                    http://dpasqua.wordpress.com
Lambda e Closures
Exemplo de como podemos deixar um código mais limpo
 usando closures
<?php
$db = mysqli_connect("server","user","pass");
Logger::log('debug','database','Conectando com a database');
Logger::log('debug','database','Inserindo informações no
banco de dados');




                                     http://dpasqua.wordpress.com
Lambda e Closures
Exemplo de como podemos deixar um código mais limpo
 usando closures
<?php
$db = mysqli_connect("server","user","pass");
Logger::log('debug','database','Conectando com a database');
Logger::log('debug','database','Inserindo informações no
banco de dados');

// definindo o closure
$logdb = function ($string) {
Logger::log('debug','database',$string); };
$logdb('Conectando com a base de dados');
$logdb('Inserindo informações no banco de dados');




                                     http://dpasqua.wordpress.com
Arquivos Phar
 Possibilita distribuir a aplicação/biblioteca em um único
 arquivo
Semelhante aos arquivos JAR do Java
Funcionalidade nativa no PHP 5.3
A criação e manipulação são feitas através de código PHP
Praticamente não há perda de desempenho




                                     http://dpasqua.wordpress.com
Arquivos Phar - Criando
É necessário setar a diretiva phar.readonly para Off no
 php.ini
Por motivos de segurança esta diretiva é habilitada por
 padrão

 $p = new Phar('/project/app.phar', 0, 'app.phar');
 $p->startBuffering();




                                     http://dpasqua.wordpress.com
Arquivos Phar - Adicionando

// método addFile
$p->addFile("/project/userBlog.php");
$p->addFile("/project/userCMS.php", "/lib/CMS.php");




                                    http://dpasqua.wordpress.com
Arquivos Phar - Adicionando

// método addFile
$p->addFile("/project/userBlog.php");
$p->addFile("/project/userCMS.php", "/lib/CMS.php");

// ArrayAccess SPL
$p['index.php'] = file_get_contents("/project/index.php");
$p['teste.txt'] = "Teste 123 456";




                                    http://dpasqua.wordpress.com
Arquivos Phar - Adicionando

// método addFile
$p->addFile("/project/userBlog.php");
$p->addFile("/project/userCMS.php", "/lib/CMS.php");

// ArrayAccess SPL
$p['index.php'] = file_get_contents("/project/index.php");
$p['teste.txt'] = "Teste 123 456";

// Incluir vários arquivos de uma vez, recursivo
$p->buildFromDirectory('/project', '/.php/');




                                    http://dpasqua.wordpress.com
Arquivos Phar - Stub
Stub é o arquivo inicial que será carregado ao executar o
 pacote
 $p->setStub('<?php Phar::mapPhar(); include
 "phar://app.phar/index.php"; __HALT_COMPILER(); ?>');


 Phar::mapPhar() - Lê e inicializa o pacote Phar
O código stub deve terminar com __HALT_COMPILER()




                                     http://dpasqua.wordpress.com
Arquivos Phar - Stub
Utilize o método createDefaultStub dentro do método
 setStub para especificar o arquivo que será executado ao
 executar o pacote

  $p->setStub($p->createDefaultStub('index.php'));




                                    http://dpasqua.wordpress.com
Arquivos Phar - Exemplo

<?php
$p = new Phar('teste.phar', 0, 'teste.phar');
$p->startBuffering();

$p['index.php'] = '<?php echo "Olá mundo"; ?>';

$p->setStub($p->createDefaultStub('index.php'));
$p->stopBuffering();
?>

# php criarTestePhar.php

# php teste.phar
Olá Mundo




                                    http://dpasqua.wordpress.com
Arquivos Phar - Manipulando
Acessando através de include

include 'teste.phar';
include 'phar://teste.phar/index.php';




                                    http://dpasqua.wordpress.com
Arquivos Phar - Web

 <?php
 $phar = new Phar('exemplo.phar');
 $phar['index.php'] = '<?php echo "Hello World Index"; ?>';
 $phar['admin.php'] = '<?php echo "Hello World Admin"; ?>';
 $phar->setStub('<?php Phar::webPhar(); __HALT_COMPILER();
 ?>');
 ?>


 Phar::webPhar() atua como um frontcontroller
 redirecionando as chamadas web para dentro do pacote




                                    http://dpasqua.wordpress.com
Arquivos Phar - Web
http://exemplo.org/exemplo.phar
“Hello World Index”
http://exemplo.org/exemplo.phar/admin.php
“Hello World Admin”




                                   http://dpasqua.wordpress.com
Mysql Native Driver
É uma alternativa ao extensão libmysql
Funciona com as versões do Mysql >= 4.1
Driver integrado com Zend Engine
Perfomance melhorada em diversas funções
Não necessidade de linkar com bibliotecas externas
Utiliza “PHP License”
Facilidade na compilação




                                    http://dpasqua.wordpress.com
Mysql Native Driver
Driver pode ser utilizado nas três extensões do MySQL
 (mysql, mysqli, PDO_MySQL)
Para usar o mysqlnd compilando o PHP a partir do código
 fonte utilize os parâmetros:
--with-mysql=mysqlnd / --with-mysqli=mysqlnd / --with-pdo-
 mysql=mysqlnd
Na distribuição oficial do PHP para Windows o driver
 mysqlnd vem habilitado por padrão
Ainda não há suporte à SSL




                                    http://dpasqua.wordpress.com
Outras Melhorias
Função getopt
Error Levels e Funções Deprecated
__callstatic
Variáveis Estáticas
Novas funções
Goto
NowDoc
__DIR__
Operador ?:
Recursos SPL

                                     http://dpasqua.wordpress.com
Melhorias getopt
A função getopt que funcionava somente no Linux esta
 disponível para Windows
Agora é possível usar o caracter de atribuição “=” ao setar
 argumentos na linha de comando

 # php teste_opt.php -i="valor teste123"



O valor do argumento pode ser opcional

# php teste_opt.php -i




                                     http://dpasqua.wordpress.com
Melhorias Error Levels
E_ALL agora inclui E_STRICT
E_DEPRECATED – Usado para indicar funções que serão
 descontinuadas em funções futuras do php
Exemplos de funções que serão descontinuadas: ereg,
 ereg_replace, split, session_register, register_globals,
 magic_quotes_gpc




                                     http://dpasqua.wordpress.com
Melhorias __callstatic
__callstatic é um método mágico invocado quando se faz
 uma chamada para um método estático inexistente
Semelhante à __call, porém para métodos estáticos

 class Teste {
 static function __callStatic($nome, $args) {
    echo $nome . "(" . implode(",", $args) . ")";
 }
 }
 Teste::funcao('a', 'b');

 // funcao(a, b)




                                    http://dpasqua.wordpress.com
Melhorias Variáveis Estáticas

<?php
$class_name = "Teste";
$static_method_name = "funcao";
$class_name::$static_method_name();
?>
string(32) "static function called"




                                      http://dpasqua.wordpress.com
Melhorias Novas Funções
array_replace e array_replace_recursive

<?php
$base = array("laranja", "banana", "maça", "goiabada");
$repl = array(0 => "abacaxi", 4 => "morango");

$bacia = array_replace($base, $repl);
print_r($bacia);
?>

 Array    (
    [0]   =>   abacaxi
    [1]   =>   banana
    [2]   =>   maþa
    [3]   =>   goiabada
    [4]   =>   morango
)


                                    http://dpasqua.wordpress.com
Melhorias Goto
Operador Goto pode ser usado para pular para outra seção
 do programa

 <?php
 goto b;
 echo 'A';

 b:
 echo 'B';
 ?>

 B




                                   http://dpasqua.wordpress.com
Melhorias NowDoc
HereDoc

<?php
$variavel = 'teste';
$bar = <<<CODIGOPHP
Teste código php $variavel
CODIGOPHP;
echo $bar; // Teste código php teste

NowDoc
<?php
$bar = <<<'CODIGOPHP'
Teste código php $variavel
CODIGOPHP;
echo $bar;
?>
Teste código php $variavel

                                   http://dpasqua.wordpress.com
Melhorias __DIR__
Constante __DIR__ indica o diretório corrente onde o script
 esta localizado
Antes do PHP 5.3
echo dirname(__FILE__);

A partir do PHP 5.3
echo __DIR__;




                                    http://dpasqua.wordpress.com
Melhorias – Operador ?:
Permite obter de forma ágil um valor não vazio à partir de
 duas expressões


  $a   =   "" ?: 1; // 1
  $b   =   1 ?: 2; // 1
  $c   =   false ?: true; // true
  $d   =   array() ?: array(10); // array(10)




                                        http://dpasqua.wordpress.com
Melhorias SPL
Bibliotecas SPL inclusas no PHP 5.3: SplFixedArray,
 SplStack, SplQueue, SplHeap, SplMinHeap, SplMaxHeap,
 SplPriorityQueue


 http://www.slideshare.net/tobias382/new-spl-features-in-
 php-53




                                    http://dpasqua.wordpress.com
Fale Conosco

            Obrigado por Assistir !



               Mais informações:

    http://dpasqua.wordpress.com

        E-mail: douglas.pasqua@gmail.com

               Fone: 11 9236-4184




                                http://dpasqua.wordpress.com

Contenu connexe

Tendances

Desenvolvimento de sistemas web com php Frameworks - Aula 1
Desenvolvimento de sistemas web com php Frameworks - Aula 1Desenvolvimento de sistemas web com php Frameworks - Aula 1
Desenvolvimento de sistemas web com php Frameworks - Aula 1Thyago Maia
 
Desenvolvimento de sistemas web com PHP Frameworks - Aula 4
Desenvolvimento de sistemas web com PHP Frameworks - Aula 4Desenvolvimento de sistemas web com PHP Frameworks - Aula 4
Desenvolvimento de sistemas web com PHP Frameworks - Aula 4Thyago Maia
 
Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 4 - 2019.1
Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 4 - 2019.1Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 4 - 2019.1
Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 4 - 2019.1Thyago Maia
 
Logs, pra que te quero! @ Meetup PHP Vale
Logs, pra que te quero! @ Meetup PHP ValeLogs, pra que te quero! @ Meetup PHP Vale
Logs, pra que te quero! @ Meetup PHP ValeGabriel Machado
 
Entre na fila. Processamento distribuído usando Gearman
Entre na fila. Processamento distribuído usando GearmanEntre na fila. Processamento distribuído usando Gearman
Entre na fila. Processamento distribuído usando GearmanElton Minetto
 
Integração do Flex com PHP através do AMFPHP
Integração do Flex com PHP através do AMFPHPIntegração do Flex com PHP através do AMFPHP
Integração do Flex com PHP através do AMFPHPelliando dias
 
Memcached, Gearman e Sphinx
Memcached, Gearman e SphinxMemcached, Gearman e Sphinx
Memcached, Gearman e SphinxElton Minetto
 
PrincipaiPrincipais Frameworks e Documentação
PrincipaiPrincipais Frameworks e DocumentaçãoPrincipaiPrincipais Frameworks e Documentação
PrincipaiPrincipais Frameworks e Documentaçãoelliando dias
 
Curso PHP UNIFACS 2014.1 – 2ª aula
Curso PHP UNIFACS 2014.1 – 2ª aulaCurso PHP UNIFACS 2014.1 – 2ª aula
Curso PHP UNIFACS 2014.1 – 2ª aulaJonata Weber
 
Leonardo Zamariola - High Order Functions e Functional Interfaces
Leonardo Zamariola - High Order Functions e Functional InterfacesLeonardo Zamariola - High Order Functions e Functional Interfaces
Leonardo Zamariola - High Order Functions e Functional InterfacesDevCamp Campinas
 
Desenvolvimento Rápido de Programas Linha de Comando
Desenvolvimento Rápido de Programas Linha de ComandoDesenvolvimento Rápido de Programas Linha de Comando
Desenvolvimento Rápido de Programas Linha de Comandogarux
 
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 PerformanceFelipe Ribeiro
 
Java web 6 JSP Expression Language Taglib parte 2
Java web 6 JSP Expression Language Taglib parte 2Java web 6 JSP Expression Language Taglib parte 2
Java web 6 JSP Expression Language Taglib parte 2Eduardo Mendes
 
Desenvolvendo uma Aplicação WEB usando o Python e o CherryPy
Desenvolvendo uma Aplicação WEB usando o Python e o CherryPyDesenvolvendo uma Aplicação WEB usando o Python e o CherryPy
Desenvolvendo uma Aplicação WEB usando o Python e o CherryPyantonio sérgio nogueira
 

Tendances (20)

Desenvolvimento de sistemas web com php Frameworks - Aula 1
Desenvolvimento de sistemas web com php Frameworks - Aula 1Desenvolvimento de sistemas web com php Frameworks - Aula 1
Desenvolvimento de sistemas web com php Frameworks - Aula 1
 
Php
PhpPhp
Php
 
Desenvolvimento de sistemas web com PHP Frameworks - Aula 4
Desenvolvimento de sistemas web com PHP Frameworks - Aula 4Desenvolvimento de sistemas web com PHP Frameworks - Aula 4
Desenvolvimento de sistemas web com PHP Frameworks - Aula 4
 
Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 4 - 2019.1
Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 4 - 2019.1Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 4 - 2019.1
Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 4 - 2019.1
 
Logs, pra que te quero! @ Meetup PHP Vale
Logs, pra que te quero! @ Meetup PHP ValeLogs, pra que te quero! @ Meetup PHP Vale
Logs, pra que te quero! @ Meetup PHP Vale
 
Dependency injection
Dependency injectionDependency injection
Dependency injection
 
Entre na fila. Processamento distribuído usando Gearman
Entre na fila. Processamento distribuído usando GearmanEntre na fila. Processamento distribuído usando Gearman
Entre na fila. Processamento distribuído usando Gearman
 
Integração do Flex com PHP através do AMFPHP
Integração do Flex com PHP através do AMFPHPIntegração do Flex com PHP através do AMFPHP
Integração do Flex com PHP através do AMFPHP
 
Memcached, Gearman e Sphinx
Memcached, Gearman e SphinxMemcached, Gearman e Sphinx
Memcached, Gearman e Sphinx
 
Php 05 Mvc
Php 05 MvcPhp 05 Mvc
Php 05 Mvc
 
PrincipaiPrincipais Frameworks e Documentação
PrincipaiPrincipais Frameworks e DocumentaçãoPrincipaiPrincipais Frameworks e Documentação
PrincipaiPrincipais Frameworks e Documentação
 
PHP 7
PHP 7PHP 7
PHP 7
 
Curso PHP UNIFACS 2014.1 – 2ª aula
Curso PHP UNIFACS 2014.1 – 2ª aulaCurso PHP UNIFACS 2014.1 – 2ª aula
Curso PHP UNIFACS 2014.1 – 2ª aula
 
Leonardo Zamariola - High Order Functions e Functional Interfaces
Leonardo Zamariola - High Order Functions e Functional InterfacesLeonardo Zamariola - High Order Functions e Functional Interfaces
Leonardo Zamariola - High Order Functions e Functional Interfaces
 
Python cherrypy
Python cherrypyPython cherrypy
Python cherrypy
 
M5 php rc
M5 php rcM5 php rc
M5 php rc
 
Desenvolvimento Rápido de Programas Linha de Comando
Desenvolvimento Rápido de Programas Linha de ComandoDesenvolvimento Rápido de Programas Linha de Comando
Desenvolvimento Rápido de Programas Linha de Comando
 
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
 
Java web 6 JSP Expression Language Taglib parte 2
Java web 6 JSP Expression Language Taglib parte 2Java web 6 JSP Expression Language Taglib parte 2
Java web 6 JSP Expression Language Taglib parte 2
 
Desenvolvendo uma Aplicação WEB usando o Python e o CherryPy
Desenvolvendo uma Aplicação WEB usando o Python e o CherryPyDesenvolvendo uma Aplicação WEB usando o Python e o CherryPy
Desenvolvendo uma Aplicação WEB usando o Python e o CherryPy
 

En vedette

En vedette (8)

A Linguagem Php
A Linguagem PhpA Linguagem Php
A Linguagem Php
 
Apresentação da Linguagem de Programação PHP
Apresentação da Linguagem de Programação PHPApresentação da Linguagem de Programação PHP
Apresentação da Linguagem de Programação PHP
 
PHP - Funções
PHP - FunçõesPHP - Funções
PHP - Funções
 
Linguagem PHP
Linguagem PHPLinguagem PHP
Linguagem PHP
 
Comandos gerais do PHP
Comandos gerais do PHPComandos gerais do PHP
Comandos gerais do PHP
 
Introdução a php
Introdução a phpIntrodução a php
Introdução a php
 
Curso de PHP Básico ao Avançado
Curso de PHP Básico ao AvançadoCurso de PHP Básico ao Avançado
Curso de PHP Básico ao Avançado
 
Bases De Dados
Bases De DadosBases De Dados
Bases De Dados
 

Similaire à PHP 5.3 Novas Funcionalidades

Injeção de Dependências com PHP
Injeção de Dependências com PHPInjeção de Dependências com PHP
Injeção de Dependências com PHPDanilo Godoy
 
PHP 5.3 - Classes e Objetos
PHP 5.3 - Classes e ObjetosPHP 5.3 - Classes e Objetos
PHP 5.3 - Classes e ObjetosGeorge Mendonça
 
Programação Orientada a Objetos (POO) com PHP - Parte 1
Programação Orientada a Objetos (POO) com PHP - Parte 1Programação Orientada a Objetos (POO) com PHP - Parte 1
Programação Orientada a Objetos (POO) com PHP - Parte 1Israel Messias
 
PHP: Linguagem + Mysql + MVC + AJAX
PHP: Linguagem + Mysql + MVC + AJAX PHP: Linguagem + Mysql + MVC + AJAX
PHP: Linguagem + Mysql + MVC + AJAX Sérgio Souza Costa
 
Introducao a orientacao a objetos com PHP
Introducao a orientacao a objetos com PHPIntroducao a orientacao a objetos com PHP
Introducao a orientacao a objetos com PHPguilhermemar
 
VRaptor - Alta produtividade no Desenvolvimento Web em Java
VRaptor - Alta produtividade no Desenvolvimento Web em JavaVRaptor - Alta produtividade no Desenvolvimento Web em Java
VRaptor - Alta produtividade no Desenvolvimento Web em JavaDaniel Faria Gomes
 
Introdução ao Zend Framework 2
Introdução ao Zend Framework 2Introdução ao Zend Framework 2
Introdução ao Zend Framework 2Elton Minetto
 
Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 3 - 2019.1
Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 3 - 2019.1Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 3 - 2019.1
Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 3 - 2019.1Thyago Maia
 
Php5 e a orientação a objetos
Php5 e a orientação a objetosPhp5 e a orientação a objetos
Php5 e a orientação a objetosxbacon
 
Como usar a documentação da API Java 2
Como usar a documentação da API Java 2Como usar a documentação da API Java 2
Como usar a documentação da API Java 2Denis L Presciliano
 
Linguagens Poo
Linguagens PooLinguagens Poo
Linguagens PooInfogenius
 
Fundamentos da Programação PHP OO - Aula 3
Fundamentos da Programação PHP OO - Aula 3Fundamentos da Programação PHP OO - Aula 3
Fundamentos da Programação PHP OO - Aula 3Thyago Maia
 

Similaire à PHP 5.3 Novas Funcionalidades (20)

Aula5
Aula5Aula5
Aula5
 
Aprofunde se no php 5.3
Aprofunde se no php 5.3Aprofunde se no php 5.3
Aprofunde se no php 5.3
 
PHP FrameWARks - FISL
PHP FrameWARks - FISLPHP FrameWARks - FISL
PHP FrameWARks - FISL
 
Injeção de Dependências com PHP
Injeção de Dependências com PHPInjeção de Dependências com PHP
Injeção de Dependências com PHP
 
PHP 5.3 - Classes e Objetos
PHP 5.3 - Classes e ObjetosPHP 5.3 - Classes e Objetos
PHP 5.3 - Classes e Objetos
 
Php 08 Oo
Php 08 OoPhp 08 Oo
Php 08 Oo
 
Prog web 06-php-oo
Prog web 06-php-ooProg web 06-php-oo
Prog web 06-php-oo
 
Programação Orientada a Objetos (POO) com PHP - Parte 1
Programação Orientada a Objetos (POO) com PHP - Parte 1Programação Orientada a Objetos (POO) com PHP - Parte 1
Programação Orientada a Objetos (POO) com PHP - Parte 1
 
PHP: Linguagem + Mysql + MVC + AJAX
PHP: Linguagem + Mysql + MVC + AJAX PHP: Linguagem + Mysql + MVC + AJAX
PHP: Linguagem + Mysql + MVC + AJAX
 
Introducao a orientacao a objetos com PHP
Introducao a orientacao a objetos com PHPIntroducao a orientacao a objetos com PHP
Introducao a orientacao a objetos com PHP
 
Migrando para o PHP 5
Migrando para o PHP 5Migrando para o PHP 5
Migrando para o PHP 5
 
Curso de PHP - Objetos
Curso de PHP - ObjetosCurso de PHP - Objetos
Curso de PHP - Objetos
 
VRaptor - Alta produtividade no Desenvolvimento Web em Java
VRaptor - Alta produtividade no Desenvolvimento Web em JavaVRaptor - Alta produtividade no Desenvolvimento Web em Java
VRaptor - Alta produtividade no Desenvolvimento Web em Java
 
Introdução ao Zend Framework 2
Introdução ao Zend Framework 2Introdução ao Zend Framework 2
Introdução ao Zend Framework 2
 
Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 3 - 2019.1
Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 3 - 2019.1Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 3 - 2019.1
Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 3 - 2019.1
 
Php5 e a orientação a objetos
Php5 e a orientação a objetosPhp5 e a orientação a objetos
Php5 e a orientação a objetos
 
Como usar a documentação da API Java 2
Como usar a documentação da API Java 2Como usar a documentação da API Java 2
Como usar a documentação da API Java 2
 
Modern PHP
Modern PHPModern PHP
Modern PHP
 
Linguagens Poo
Linguagens PooLinguagens Poo
Linguagens Poo
 
Fundamentos da Programação PHP OO - Aula 3
Fundamentos da Programação PHP OO - Aula 3Fundamentos da Programação PHP OO - Aula 3
Fundamentos da Programação PHP OO - Aula 3
 

Plus de Douglas V. Pasqua

Graph API - Desenvolvimento para Facebook
Graph API - Desenvolvimento para FacebookGraph API - Desenvolvimento para Facebook
Graph API - Desenvolvimento para FacebookDouglas V. Pasqua
 
Dicas para sua carreira de Desenvolvedor PHP
Dicas para sua carreira de Desenvolvedor PHPDicas para sua carreira de Desenvolvedor PHP
Dicas para sua carreira de Desenvolvedor PHPDouglas V. Pasqua
 
Escrevendo códigos php seguros
Escrevendo códigos php segurosEscrevendo códigos php seguros
Escrevendo códigos php segurosDouglas V. Pasqua
 
Unicode: Os segredos da Codificação de Caracteres
Unicode: Os segredos da Codificação de CaracteresUnicode: Os segredos da Codificação de Caracteres
Unicode: Os segredos da Codificação de CaracteresDouglas V. Pasqua
 
Tuning Apache/MySQL/PHP para desenvolvedores
Tuning Apache/MySQL/PHP para desenvolvedoresTuning Apache/MySQL/PHP para desenvolvedores
Tuning Apache/MySQL/PHP para desenvolvedoresDouglas V. Pasqua
 

Plus de Douglas V. Pasqua (9)

Graph API - Desenvolvimento para Facebook
Graph API - Desenvolvimento para FacebookGraph API - Desenvolvimento para Facebook
Graph API - Desenvolvimento para Facebook
 
Web Services RESTful
Web Services RESTfulWeb Services RESTful
Web Services RESTful
 
Introdução APIs RESTful
Introdução APIs RESTfulIntrodução APIs RESTful
Introdução APIs RESTful
 
Dicas para sua carreira de Desenvolvedor PHP
Dicas para sua carreira de Desenvolvedor PHPDicas para sua carreira de Desenvolvedor PHP
Dicas para sua carreira de Desenvolvedor PHP
 
Escrevendo códigos php seguros
Escrevendo códigos php segurosEscrevendo códigos php seguros
Escrevendo códigos php seguros
 
Unicode: Os segredos da Codificação de Caracteres
Unicode: Os segredos da Codificação de CaracteresUnicode: Os segredos da Codificação de Caracteres
Unicode: Os segredos da Codificação de Caracteres
 
The Facebook Plataform
The Facebook PlataformThe Facebook Plataform
The Facebook Plataform
 
Tuning Apache/MySQL/PHP para desenvolvedores
Tuning Apache/MySQL/PHP para desenvolvedoresTuning Apache/MySQL/PHP para desenvolvedores
Tuning Apache/MySQL/PHP para desenvolvedores
 
Segurança Web com PHP5
Segurança Web com PHP5Segurança Web com PHP5
Segurança Web com PHP5
 

PHP 5.3 Novas Funcionalidades

  • 1. Novas Funcionalidades no PHP 5.3 Douglas V. Pasqua Zend Certified Engineer douglas.pasqua@gmail.com http://dpasqua.wordpress.com
  • 2. Objetivo Conhecer as principais funcionalidades incluídas no PHP 5.3 Exemplos de códigos PHP das novas funcionalidades Melhores práticas de programação ao se trabalhar com os novos recursos http://dpasqua.wordpress.com
  • 3. Tópicos Namespaces Static Late Bindings Lambda e Closures Arquivos Phar mysqlnd – MySQL Native Driver Outras melhorias http://dpasqua.wordpress.com
  • 4. Namespaces – Características Agrupar classes, funções e constantes em pacotes (namespaces) Possibilita mais de um classe/função/constante com o mesmo nome, porém em diferentes namespaces Diminui o número de prefixos usados nos nomes das classes/funções e constantes Deixa o código mais limpo e legível http://dpasqua.wordpress.com
  • 5. Namespaces – Definição Determinando um namespace para um arquivo PHP A diretiva namespace deve ser declarada antes de qualquer outro código php ou caractéres na saída padrão <?php namespace exemplo; http://dpasqua.wordpress.com
  • 6. Namespaces – Exemplo Arquivo UsuarioBlog.php <?php namespace Blog; class Usuario { private $nome; public function setNome ($nome) { $this->nome = $nome; } public function getNome() { return "Usuário Atual do Blog é " . $this->nome; } } http://dpasqua.wordpress.com
  • 7. Namespaces – Exemplo Arquivo UsuarioCms.php <?php namespace Cms; class Usuario { private $nome; public function setNome ($nome) { $this->nome = $nome; } public function getNome() { return "Usuário Atual do Cms é " . $this->nome; } } http://dpasqua.wordpress.com
  • 8. Namespaces – Exemplo Acessando as classes “Usuario” de acordo com o namespace. // incluíndo os arquivos das classes 'Usuarios' require_once("UserBlog.php"); require_once("UserCms.php"); http://dpasqua.wordpress.com
  • 9. Namespaces – Exemplo Acessando as classes “Usuario” de acordo com o namespace. // incluíndo os arquivos das classes 'Usuarios' require_once("UserBlog.php"); require_once("UserCms.php"); // Instancinado a classe Usuario no namespace Blog $usuario = new BlogUsuario(); $usuario->setNome("Douglas"); echo $usuario->getNome() . PHP_EOL; // Usuário Atual do Blog é Douglas http://dpasqua.wordpress.com
  • 10. Namespaces – Exemplo Acessando as classes “Usuario” de acordo com o namespace. // incluíndo os arquivos das classes 'Usuarios' require_once("UserBlog.php"); require_once("UserCms.php"); // Instancinado a classe Usuario no namespace Blog $usuario = new BlogUsuario(); $usuario->setNome("Douglas"); echo $usuario->getNome() . PHP_EOL; // Usuário Atual do Blog é Douglas // Instancinado a classe Usuario no namespace Cms $usuario1 = new CmsUsuario(); $usuario1->setNome("Douglas"); echo $usuario1->getNome() . PHP_EOL; // Usuário Atual do Cms é Douglas http://dpasqua.wordpress.com
  • 11. Namespaces – Utilizando Nome qualificado absoluto $a = new BlogUsuario(); $b = new CmsUsuario(); http://dpasqua.wordpress.com
  • 12. Namespaces – Utilizando Nome qualificado absoluto $a = new BlogUsuario(); $b = new CmsUsuario(); Nome não-qualificado namespace Blog; $a = new Usuario(); // BlogUsuario http://dpasqua.wordpress.com
  • 13. Namespaces – Utilizando Nome qualificado absoluto $a = new BlogUsuario(); $b = new CmsUsuario(); Nome não-qualificado namespace Blog; $a = new Usuario(); // BlogUsuario Nome qualificado relativo namespace Empresa; $a = new BlogUsuario(); // EmpresaBlogUsuario // Erro pois classe não existe neste namespace http://dpasqua.wordpress.com
  • 14. Namespaces – Import e Alias A finalidade do Alias é criar um nome mais curto para referenciar um elemento A palavra-chave para import e alias é “use” use BlogUsuario as BlogUsuario; use CmsUsuario; $u1 = new BlogUsuario(); // alias referenciando BlogUsuario(); $u2 = new Usuario(); // alias referenciando CmsUsuario(); $u3 = new BlogUsuario(); // FQN não são afetados por Alias e import http://dpasqua.wordpress.com
  • 15. Namespaces – Espaço Global A classe/função/constante pertencem ao namespace “global” quando não for especificado nenhuma namespace <?php class Usuario { private $nome; public function setNome ($usuario) { $this->nome = $usuario; } public function getNome() { return "Usuário Atual Global é " . $this->nome; } } http://dpasqua.wordpress.com
  • 16. Namespaces – Espaço Global Quando pretendemos usar um elemento definido no espaço global, utiliza o prefixo “” seguido pelo nome do elemento $usuario = new Usuario(); $usuario->setNome("Douglas"); echo $usuario->getNome(); // Usuário Atual Global é Douglas http://dpasqua.wordpress.com
  • 17. Namespaces Além de classes, namespaces se aplicam para funções e constantes <?php namespace ABC; const TESTCONST = true; // função fopen no namespace ABC function fopen() { // chamando a função Global fopen $f = fopen(...); // constante no namespace ABC return TESTCONST; } http://dpasqua.wordpress.com
  • 18. Namespaces __NAMESPACE__ A constante __NAMESPACE__ contém o nome da namespace corrente No namespace “Global” a constante terá o valor “vazio” Além da constante __NAMEPSACE__ existe a palavra-chave “namespace” que pode ser usada para referenciar o namespace atual <?php namespace FooBar; echo __NAMESPACE__; // exibe FooBar namespacefunc(); // chama a função em FooBarfunc(); http://dpasqua.wordpress.com
  • 19. Namespaces - Múltiplos É possível trabalhar com múltiplos namespaces em um mesmo arquivo namespace ProjetoBlog { const teste_constante = 1; class Usuario() { ... } } namespace ProjetoCms { const teste_constante = 1; class Usuario() { ... } } namespace { const teste_constante = 1; class Usuario() { ... } } http://dpasqua.wordpress.com
  • 20. Namespaces - autoload  É possível identificar o namespace na função de autoload do PHP. Autoload no PHP permite carregar classes dinâmicamente A função de autoload recebe o FQN, que inclui o namespace <?php $usuario = new ProjetoCmsUsuario(); function __autoload($class) { $class = 'classes/' . str_replace('', '/', $class) . '.php'; require_once($class); // classes/Projeto/Cms/Usuario.php } http://dpasqua.wordpress.com
  • 21. Late Static Bindings Pode ser usado para referência a classe chamada (run-time) em um contexto de herança de método estático http://dpasqua.wordpress.com
  • 22. Late Static Bindings <?php class A { public static function who() { echo __CLASS__; } public static function test() { self::who(); // self:: referencia a classe do qual o método test pertence } } class B extends A { public static function who() { echo __CLASS__; } } B::test(); // Será impresso "A" e não "B" http://dpasqua.wordpress.com
  • 23. Late Static Bindings <?php class A { public static function who() { echo __CLASS__; } public static function test() { static::who(); // static:: referencia a classe chamada em tempo de execução } } class B extends A { public static function who() { echo __CLASS__; } } B::test(); // Dessa vez será impresso “B” http://dpasqua.wordpress.com
  • 24. Lambda e Closures  Lambda é o mesmo que funções anônimas. Podem ser definidas em qualquer lugar da aplicação As funções anônimas podem ser atribuídas à uma variável A função deixará de existir quando a variável sair fora do escopo A utilização mais comum são em funções que aceitam um callback, como array_map, usort, etc. É equivalente a função create_function. Lambda são mais rápidas e tornam o código mais limpo. create_function é executada em run-time enquanto Lambda são criadas em compile-time http://dpasqua.wordpress.com
  • 25. Lambda e Closures <?php $r = array_map(function($value) { return $value * 4; }, array(2, 4, 6, 8, 10)); print_r ($r); ?> 8 16 24 32 40 http://dpasqua.wordpress.com
  • 26. Lambda e Closures <?php $a = array(10, 4, 5 ,3 ,1); usort($a, function($a, $b) { if ($a == $b) { return 0; } return ($a < $b) ? -1 : 1; }); print_r($a); ?> Array ( [0] => 1 [1] => 3 [2] => 4 [3] => 5 [4] => 10 ) http://dpasqua.wordpress.com
  • 27. Lambda e Closures  Closures adicionam recursos à Lambdas Closures permite a interação de variáveis externas A importação das variáveis externas são feitas através da palavra-chave “use” <?php $string = "Olá teste!"; $closure = function() use ($string) { echo $string; }; $closure(); ?> Olá teste ! http://dpasqua.wordpress.com
  • 28. Lambda e Closures Por padrão as variáveis importadas são passadas por valor É possível passar variáveis por referência usando “&” <?php $a = 10; $closure = function() use (&$a) { $a += 50; }; $closure(); var_dump ($a); // int(60) $closure(); var_dump ($a); // int(110) $closure(); var_dump ($a); // int(160) http://dpasqua.wordpress.com
  • 29. Lambda e Closures Além de programação procedural, closures podem ser utilizados em programação orientada a objetos <?php class DebugAll { public function __invoke($var) { var_dump($var); } } $obj1 = new DebugAll; $obj1(50); $obj1(100); ?> int(50) int(100) http://dpasqua.wordpress.com
  • 30. Lambda e Closures Exemplo de como podemos deixar um código mais limpo usando closures <?php $db = mysqli_connect("server","user","pass"); Logger::log('debug','database','Conectando com a database'); Logger::log('debug','database','Inserindo informações no banco de dados'); http://dpasqua.wordpress.com
  • 31. Lambda e Closures Exemplo de como podemos deixar um código mais limpo usando closures <?php $db = mysqli_connect("server","user","pass"); Logger::log('debug','database','Conectando com a database'); Logger::log('debug','database','Inserindo informações no banco de dados'); // definindo o closure $logdb = function ($string) { Logger::log('debug','database',$string); }; $logdb('Conectando com a base de dados'); $logdb('Inserindo informações no banco de dados'); http://dpasqua.wordpress.com
  • 32. Arquivos Phar  Possibilita distribuir a aplicação/biblioteca em um único arquivo Semelhante aos arquivos JAR do Java Funcionalidade nativa no PHP 5.3 A criação e manipulação são feitas através de código PHP Praticamente não há perda de desempenho http://dpasqua.wordpress.com
  • 33. Arquivos Phar - Criando É necessário setar a diretiva phar.readonly para Off no php.ini Por motivos de segurança esta diretiva é habilitada por padrão $p = new Phar('/project/app.phar', 0, 'app.phar'); $p->startBuffering(); http://dpasqua.wordpress.com
  • 34. Arquivos Phar - Adicionando // método addFile $p->addFile("/project/userBlog.php"); $p->addFile("/project/userCMS.php", "/lib/CMS.php"); http://dpasqua.wordpress.com
  • 35. Arquivos Phar - Adicionando // método addFile $p->addFile("/project/userBlog.php"); $p->addFile("/project/userCMS.php", "/lib/CMS.php"); // ArrayAccess SPL $p['index.php'] = file_get_contents("/project/index.php"); $p['teste.txt'] = "Teste 123 456"; http://dpasqua.wordpress.com
  • 36. Arquivos Phar - Adicionando // método addFile $p->addFile("/project/userBlog.php"); $p->addFile("/project/userCMS.php", "/lib/CMS.php"); // ArrayAccess SPL $p['index.php'] = file_get_contents("/project/index.php"); $p['teste.txt'] = "Teste 123 456"; // Incluir vários arquivos de uma vez, recursivo $p->buildFromDirectory('/project', '/.php/'); http://dpasqua.wordpress.com
  • 37. Arquivos Phar - Stub Stub é o arquivo inicial que será carregado ao executar o pacote $p->setStub('<?php Phar::mapPhar(); include "phar://app.phar/index.php"; __HALT_COMPILER(); ?>');  Phar::mapPhar() - Lê e inicializa o pacote Phar O código stub deve terminar com __HALT_COMPILER() http://dpasqua.wordpress.com
  • 38. Arquivos Phar - Stub Utilize o método createDefaultStub dentro do método setStub para especificar o arquivo que será executado ao executar o pacote $p->setStub($p->createDefaultStub('index.php')); http://dpasqua.wordpress.com
  • 39. Arquivos Phar - Exemplo <?php $p = new Phar('teste.phar', 0, 'teste.phar'); $p->startBuffering(); $p['index.php'] = '<?php echo "Olá mundo"; ?>'; $p->setStub($p->createDefaultStub('index.php')); $p->stopBuffering(); ?> # php criarTestePhar.php # php teste.phar Olá Mundo http://dpasqua.wordpress.com
  • 40. Arquivos Phar - Manipulando Acessando através de include include 'teste.phar'; include 'phar://teste.phar/index.php'; http://dpasqua.wordpress.com
  • 41. Arquivos Phar - Web <?php $phar = new Phar('exemplo.phar'); $phar['index.php'] = '<?php echo "Hello World Index"; ?>'; $phar['admin.php'] = '<?php echo "Hello World Admin"; ?>'; $phar->setStub('<?php Phar::webPhar(); __HALT_COMPILER(); ?>'); ?>  Phar::webPhar() atua como um frontcontroller redirecionando as chamadas web para dentro do pacote http://dpasqua.wordpress.com
  • 42. Arquivos Phar - Web http://exemplo.org/exemplo.phar “Hello World Index” http://exemplo.org/exemplo.phar/admin.php “Hello World Admin” http://dpasqua.wordpress.com
  • 43. Mysql Native Driver É uma alternativa ao extensão libmysql Funciona com as versões do Mysql >= 4.1 Driver integrado com Zend Engine Perfomance melhorada em diversas funções Não necessidade de linkar com bibliotecas externas Utiliza “PHP License” Facilidade na compilação http://dpasqua.wordpress.com
  • 44. Mysql Native Driver Driver pode ser utilizado nas três extensões do MySQL (mysql, mysqli, PDO_MySQL) Para usar o mysqlnd compilando o PHP a partir do código fonte utilize os parâmetros: --with-mysql=mysqlnd / --with-mysqli=mysqlnd / --with-pdo- mysql=mysqlnd Na distribuição oficial do PHP para Windows o driver mysqlnd vem habilitado por padrão Ainda não há suporte à SSL http://dpasqua.wordpress.com
  • 45. Outras Melhorias Função getopt Error Levels e Funções Deprecated __callstatic Variáveis Estáticas Novas funções Goto NowDoc __DIR__ Operador ?: Recursos SPL http://dpasqua.wordpress.com
  • 46. Melhorias getopt A função getopt que funcionava somente no Linux esta disponível para Windows Agora é possível usar o caracter de atribuição “=” ao setar argumentos na linha de comando # php teste_opt.php -i="valor teste123" O valor do argumento pode ser opcional # php teste_opt.php -i http://dpasqua.wordpress.com
  • 47. Melhorias Error Levels E_ALL agora inclui E_STRICT E_DEPRECATED – Usado para indicar funções que serão descontinuadas em funções futuras do php Exemplos de funções que serão descontinuadas: ereg, ereg_replace, split, session_register, register_globals, magic_quotes_gpc http://dpasqua.wordpress.com
  • 48. Melhorias __callstatic __callstatic é um método mágico invocado quando se faz uma chamada para um método estático inexistente Semelhante à __call, porém para métodos estáticos class Teste { static function __callStatic($nome, $args) { echo $nome . "(" . implode(",", $args) . ")"; } } Teste::funcao('a', 'b'); // funcao(a, b) http://dpasqua.wordpress.com
  • 49. Melhorias Variáveis Estáticas <?php $class_name = "Teste"; $static_method_name = "funcao"; $class_name::$static_method_name(); ?> string(32) "static function called" http://dpasqua.wordpress.com
  • 50. Melhorias Novas Funções array_replace e array_replace_recursive <?php $base = array("laranja", "banana", "maça", "goiabada"); $repl = array(0 => "abacaxi", 4 => "morango"); $bacia = array_replace($base, $repl); print_r($bacia); ?> Array ( [0] => abacaxi [1] => banana [2] => maþa [3] => goiabada [4] => morango ) http://dpasqua.wordpress.com
  • 51. Melhorias Goto Operador Goto pode ser usado para pular para outra seção do programa <?php goto b; echo 'A'; b: echo 'B'; ?> B http://dpasqua.wordpress.com
  • 52. Melhorias NowDoc HereDoc <?php $variavel = 'teste'; $bar = <<<CODIGOPHP Teste código php $variavel CODIGOPHP; echo $bar; // Teste código php teste NowDoc <?php $bar = <<<'CODIGOPHP' Teste código php $variavel CODIGOPHP; echo $bar; ?> Teste código php $variavel http://dpasqua.wordpress.com
  • 53. Melhorias __DIR__ Constante __DIR__ indica o diretório corrente onde o script esta localizado Antes do PHP 5.3 echo dirname(__FILE__); A partir do PHP 5.3 echo __DIR__; http://dpasqua.wordpress.com
  • 54. Melhorias – Operador ?: Permite obter de forma ágil um valor não vazio à partir de duas expressões $a = "" ?: 1; // 1 $b = 1 ?: 2; // 1 $c = false ?: true; // true $d = array() ?: array(10); // array(10) http://dpasqua.wordpress.com
  • 55. Melhorias SPL Bibliotecas SPL inclusas no PHP 5.3: SplFixedArray, SplStack, SplQueue, SplHeap, SplMinHeap, SplMaxHeap, SplPriorityQueue http://www.slideshare.net/tobias382/new-spl-features-in- php-53 http://dpasqua.wordpress.com
  • 56. Fale Conosco Obrigado por Assistir ! Mais informações: http://dpasqua.wordpress.com E-mail: douglas.pasqua@gmail.com Fone: 11 9236-4184 http://dpasqua.wordpress.com