aprofunde se no php 5.3

Post on 18-Nov-2014

2.096 Views

Category:

Documents

1 Downloads

Preview:

Click to see full reader

DESCRIPTION

 

TRANSCRIPT

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, late static binding, etc...

PHP 6 ?...

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

Definição de Classes

<?php

namespace System\Control;

class UserController {}

$uc = new \System\Control\UserController();

$uc2 = new UserController(); //mesma classe da declaração anterior

Definição de funções

<?php

namespace System\Control;

function hello(){

return “Hello”;

}

echo \System\Control\hello(); //Hello

echo hello(); //Hello

Usando Classes de outro Namespace

<?php

namespace Zend\SignalSlot {

class Signals{}

}

namespace{ //global

use Zend\SignalSlot\Signals;

$signals = new Signals();

}

Alterando o nome

<?php

namespace Squirrel\Core{

class Site{}

}

namespace{

use \Squirrel\Core\Site as SquirrelSite;

$squirrelSite = new SquirrelSite();

}

Chamada Global

<?php

namespace Doctrine{

class Manager{public static function load() { }

}

}

namespace{

\Doctrine\Manager::load();

}

Late Static Binding

O problema

Classe Mãe

<?php

class Foo{

protected static function speak(){return “Hi”;

}

public static function sayHi(){return self::speak();

}

}

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 static::speak();

}

}

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('Marcus'); //Olá Marcus

Funções anônimas

<?php

function processaAlgo( $valor, $callback ){

$callback();

}

processaAlgo( 10, function(){

echo “Processado ...”;

} );

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' //Alias para referências

);

$phar->startBuffering();

Adicionando arquivos

<?php

$phar->addFile( “/projeto/header.php” );

$phar->addFile( “/projeto/funcoes.php”, “/lib/global.php” );

Adicionando arquivos – outra forma

<?php

$phar['index.php'] = file_get_contents( '/projeto/index.php' );

$phar['header.php'] = '<h1>Header</h1>';

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 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.

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 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.

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.

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['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();

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/manual/en/ref.fileinfo.php

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/

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 elementos )

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 estaticamente';

}

}

echo Foo::bar(); //bar foi chamada //estaticamente

__DIR__

<?php

echo dirname(__FILE__);

echo __DIR__;

Novo ternário

<?php

$user->setApelido('mvleandro');

$apelido = $user->getApelido()?:'Não informado';

echo $apelido; //mvleandro

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: @mvleandroE-mail: mvleandro@gmail.comMSN: marcus_leandro@hotmail.comCel: (21)-8211-9096

top related