APROFUNDE-SE NO PHP 5.3
Marcus Vinicius Bastos Leandro
http://www.phpnaveia.com.br
Você já está usando o PHP 5.3?
Um breve histórico

PHP 5.0 implementou um novo modelo de
objetos

PHP 5.3 nos presenteou com: namespaces,
clousures, la...
Por que migrar para o PHP 5.3?

Mais rápido

Melhor gerenciamento de memória

Bug fixes

Zend Framework 2.0, Symfony 2...
Definição de Classes
<?php
namespace SystemControl;
class UserController {}
$uc = new SystemControlUserController();
$uc2 ...
Definição de funções
<?php
namespace SystemControl;
function hello(){
return “Hello”;
}
echo SystemControlhello(); //Hello...
Usando Classes de outro
Namespace
<?php
namespace ZendSignalSlot {
class Signals{}
}
namespace{ //global
use ZendSignalSlo...
Alterando o nome
<?php
namespace SquirrelCore{
class Site{}
}
namespace{
use SquirrelCoreSite as SquirrelSite;
$squirrelSi...
Chamada Global
<?php
namespace Doctrine{
class Manager{
public static function load() { }
}
}
namespace{
DoctrineManager::...
Late Static Binding
O problema
Classe Mãe
<?php
class Foo{
protected static function speak(){
return “Hi”;
}
public static function sayHi(){
return self:...
Classe Filha
<?php
class Bar extends Foo{
protected static function speak(){
return “Hello”;
}
}
“Hi” ou “Hello” ?
<?php
echo Bar::sayHi();
“Hi” ou “Hello” ?
<?php
echo Bar::sayHi(); //Hi
A solução
Classe Mãe
<?php
class Foo{
protected static function speak(){
return “Hi”;
}
public static function sayHi(){
return stati...
Classe Filha
<?php
class Bar extends Foo{
protected static function speak(){
return “Hello”;
}
}
“Hi” ou “Hello”
<?php
echo Bar::sayHi(); //Hello
Clousures / Lambdas
Atribuindo a variáveis
<?php
$sayHi = function(){
return “Hi”;
}
echo $sayHi();
Escopo
<?php
$saudacao = 'Olá';
$falar = function ( $nome ) use ($saudacao){
return $saudacao . ' ' . $nome;
}
echo $falar...
Funções anônimas
<?php
function processaAlgo( $valor, $callback ){
…
$callback();
}
processaAlgo( 10, function(){
echo “Pr...
Phar ( PHP Archive )

Distribuindo aplicações em um único arquivo
Criando arquivos Phar
<?php
$phar = new Phar(
'/projeto/app.phar', //caminho para o arquivo
0, //parâmetros
'app.phar' //A...
Adicionando arquivos
<?php
$phar->addFile( “/projeto/header.php” );
$phar->addFile( “/projeto/funcoes.php”,
“/lib/global.p...
Adicionando arquivos – outra forma
<?php
$phar['index.php'] =
file_get_contents( '/projeto/index.php' );
$phar['header.php...
Adicionando arquivos de um
diretório
<?php
$phar->buildFromDirectory( '/projeto', '/.php/' );
Stub

O arquivo Stub é um pedaço de código que
será executado quando o arquivo Phar for
carregado. Para definir o pedaço ...
Stub
<?php
$phar->setStub('<?php Phar::mapPhar();
include "phar://app.phar/index.php";
__HALT_COMPILER(); ?>');
Stub

O código deve terminar com a função
__HALT_COMPILER().

O método statico Phar::mapPhar() lê e inicializa
o arquivo...
Stub

Caso não exista nenhum procedimento
especial ao carregar o arquivo Phar, e você
deseja simplesmente executar um arq...
Stub
<?php
$phar->setStub($p-
>createDefaultStub( 'index.php' ) );
Exemplo completo

index.php
<?php
echo “Olá mundo”;
?>
Script para criar o Phar

criaPhar.php
<?php
$p = new Phar('teste.phar', 0, 'teste.phar');
$p->startBuffering();
$p['inde...
Criando o phar
# php criaPhar.php

Após a execução do script acima será criado o
arquivo teste.phar
Executando o Phar
# php teste.phar

A saída da execução será:
Olá Mundo
E tem mais...

Funções de internacionalização

SQLite versão 3

FileInfo: mime-type, encoding -
http://www.php.net/manu...
DateTime Object

Adicionar o subtrair datas

Calcular a diferença entre duas datas

Definir/recuperar unix timestamp

...
Novas estruturas SPL
SPL Stack

Push e Pop

Last in, First Out (LIFO)

Usa menos memória do que arrays para
grandes pilhas ( mais que 5.000 ...
SPLQueue

Enqueue & Dequeue

First in, First Out (FIFO)

Mais rápida e usa menos memória que arrays
SPLHeap

Insert & Remove

Reordena elementos baseado em
comparações

Mais rápido e usa menos memória que arrays
Veja mais em
http://matthewturland.com/2010/05/20/new-spl-
features-in-php-5-3/
GOTO

Essa parte pula
Nova sintaxe
__invoke()
<?php
class Foo{
public function __invoke($x){
return $x + $x;
}
}
$foo = new Foo();
echo $foo(2); //4
__callStatic()
<?php
class Foo{
public static function __callStatic( $name, $args ){
return $name . ' foi chamada estatica...
__DIR__
<?php
echo dirname(__FILE__);
echo __DIR__;
Novo ternário
<?php
$user->setApelido('mvleandro');
$apelido = $user->getApelido()?:'Não informado';
echo $apelido; //mvle...
Referência

PHP Manual – http://php.net/

Bradley Holt – http://bradley-holt.com/

PHP Brasil - http://phpbrasil.com/
Perguntas?
Obrigado
Marcus Vinicius Bastos Leandro
http://www.phpnaveia.com.br
Twitter: @mvleandro
E-mail: mvleandro@gmail.com
MSN: m...
Upcoming SlideShare
Loading in …5
×

Aprofunde se no php 5.3

1,885 views

Published on

0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,885
On SlideShare
0
From Embeds
0
Number of Embeds
33
Actions
Shares
0
Downloads
32
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

Aprofunde se no php 5.3

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

×