Inscrições abertas para o TDC Porto Alegre

TDC 2013

Salve, galera!

Estão abertas as inscrições para o The Developer’s Conference (TDC) que ocorre em Porto Alegre dos dias 16 a 18/10/2014. Os descontos da fase 1 vão até dia 16 de setembro.

O PHPRS já está trabalhando na montagem da grade para a trilha PHP.

Então, não perca tempo! Corre antes que o desconto acabe! Mais informações e inscrição no TDC, neste link.

Um abraço a todos e fiquem com Deus.
Rafael Jaques

PHP 5.6.0 lançado! Quais as novidades?

PHP Logo

No dia 28 de agosto de 2014 foi lançada a versão 5.6.0 do PHP.

Escrevo este rápido artigo apenas para listar algumas das novas funcionalidades dessa versão. Caso você queira mais detalhes sobre as novidades e sobre como migrar, visite a página oficial PHP 5.6 new features.

Expressões com constantes escalares

Agora é possível fornecer uma expressão escalar envolvendo números e strings e/ou constantes em contextos que anteriormente o PHP esperava um valor estático, como em declaração de constantes e propriedades e na definição de argumentos padrão para funções.

<?php
const UM = 1;
const DOIS = UM * 2;

class C {
    const TRES = DOIS + 1;
    const UM_TERCO = UM / self::TRES;
    const SENTENCA = 'O valor de TRES e '.self::TRES;

    public function f($a = UM + self::TRES) {
        return $a;
    }
}

echo (new C)->f()."\n";
echo C::SENTENCA;
?>

O exemplo acima retornará:

4
O valor de TRES e 3

__debuginfo()

Foi uma das novidades que mais gostei. Agora e possível utilizar o método mágico __debuginfo() para modificar as propriedades e valores que são mostrados quando o objeto é chamado por um var_dump().

<?php
class A {
    private $prop;

    public function __construct($valor) {
        $this->prop = $valor;
    }

    public function __debugInfo() {
        return [
            'propQuadrado' => $this->prop ** 2,
        ];
    }
}
var_dump(new A(42));
?>

O exemplo acima retornará:

object(A)#1 (1) {
["propQuadrado"]=>
int(1764)
}

use function e use const

The use operator has been extended to support importing functions and constants in addition to classes. This is achieved via the use function and use const constructs, respectively.

O operador use agora suporta importação de funções e constantes, além de classes. Você pode fazer isso a partir de use function e use const.

<?php

namespace Name\Space {
    const FOO = 42;
    function f() { echo __FUNCTION__."\n"; }
}

namespace {
    use const Name\Space\FOO;
    use function Name\Space\f;

    echo FOO."\n";
    f();
}
?>

O exemplo acima retornará:

42
Name\Space\f

E mais

Além dessas funcionalidades que comentei, ainda está incluso no pacote:

  • Adicionado suporte a MIME type no CLI
  • São aceitos uploads maiores que 2GB
  • Suporte a funções variádicas e desempacotamento de argumentos (já falei sobre isso aqui)
  • PHPDBG embutido por padrão
  • Melhorias na extensão Zip
  • UTF-8 agora é padrão
  • Exponenciação via ** ($variavel = 3**2;)
  • O wrapper php://input agora pode ser aberto quantas vezes for necessário, o que levou a uma redução da memória utilizada pelo POST

 

E você? Já experimentou essa versão? Deixe uma mensagem com seus comentários sobre mais essa atualização do PHP rumo à versão 6!

Não se esqueça que todas as novas funcionalidades estão comentadas no blog oficial do PHP.

Um abraço a todos e fiquem com Deus.
Rafael Jaques

Os posts mais lidos aqui sobre PHP em 2013

Artigos mais lidos sobre PHP

Salve, galera! Fome de PHP?

O ano de 2013 foi muito interessante. Pude aprender muita coisa e, consequentemente, passar muito do que aprendi adiante. Pensando nisso, resolvi fazer essa compilação com os posts mais lidos no ano passado para que vocês possam ficar por dentro do que o pessoal tem lido por aqui!

Vamos aos posts

1. Entendendo as Expressões Regulares (19.512 visitas)

De forma impressionantes, esse artigo escrito há 7 anos continua sendo o meu artigo mais lido. Anualmente ele tem uma média de quase 20 mil visitas. Se você procurar no Google expressões regulares vai ver o link na primeira página. Muito obrigado por confiarem em mim para estudar um tema que muitas vezes é complexo.

2. Iniciando com Zend Framework 2: Skeleton e ZfcUser (6.489 visitas)

O Zend Framework 2 tem sofrido com a falta de artigos escritos em português. Provavelmente por isso que tanta gente tenha procurado esse tutorial.

3. 10 ferramentas para o desenvolvimento PHP moderno (5.316 visitas)

Aqui vemos uma compilação de ferramentas que ajudam a aumentar a produtividade do desenvolvedor PHP. O artigo está um pouco desatualizado, mas pretendo mexer nele em breve.

4. Gerando números de identificação (ID) únicos com PHP (4.491 visitas)

Um artigo que surgiu de uma dúvida que eu tinha. Aqui eu trabalho a função uniqid( ) para gerar hashs únicos e aleatórios.

5. Ping – Pingando IP, Máquinas, Endereços e URLs (4.077 visitas)Para determinar se uma máquina está ligada ou se um endereço é acessível, nada melhor do que um ping. Nesse artigo eu explico algumas maneiras de pingar IPs, máquinas e URLs.

6. 7 coisas simples em PHP que alguns ainda complicam (3.970 visitas)

Este artigo rendeu muitas visitas porque possui dicas que auxiliam na produtividade do programador PHP. Várias técnicas e abordagens para facilitar tarefas cotidianas.

7. Forçar o dowload de um arquivo (3.229 visitas)Artigo também bastante antigo ensinando a enviar um arquivo direto para download sem permitir que o navegador tente executar uma pré-visualização.

8. Descobrindo a idade através da data de nascimento (3.126 visitas)

Script simples para retornar a idade de alguém através de sua data de nascimento. Nos comentários existem várias opções ao script original.

9. Detectando o charset de uma string – UTF-8, ISO-8859-1, etc. (2.923 visitas)

Devido aos diversos erros com acentuação, as vezes precisamos descobrir em qual codificação determinada string está. Este artigo possui um pequeno snippet para realizar essa identificação.

10. PHP e Unicode – O caminho das pedras (2.635 visitas)

Artigo escrito pelo meu amigo Gustavo Ciello sobre como lidar com PHP e Unicode sem traumas.

 

E aí, gostaram da compilação? Já tinham lido todos esses artigos?

Comentem e mandem suas sugestões. Não esqueçam que sugestões para novos artigos são sempre bem-vindas!

Um abraço a todos e fiquem com Deus!
Rafael Jaques

Utilizando Sessões no Zend Framework 2 – Parte 1

Zend Framework 2

Todos nós sabemos que o PHP implementa uma abordagem stateless para aplicações. O processo do PHP inicia, as variáveis são alocadas, informações são geradas e armazenadas e então, quando a requisição é finalizada, todo o estado é perdido. Todas as informações geradas durante a requisição são perdidas quando ela acaba.

Para driblar esse problema, foi introduzido no PHP o conceito de sessões que nos permite armazenar informações entre uma requisição e outra. No entanto, como na maioria das vezes, conforme as aplicações se tornam mais complexas, a habilidade de interagir com as sessões em uma maneira que supre a necessidade de aplicação cresceu também.

Felizmente, no Zend Framework 2, existe um conjunto de classes que auxilia na redução da complexidade do gerenciamento de informações na sessão, ou seja, podemos interagir, configurar ou armazenar sem distanciar muito o programador da implementação da aplicação ou então adicionar muita complexidade ao processo.

No artigo de hoje, o primeiro de dois, vamos ver como colocar pra funcionar uma configuração básica, assim você pode ter, hoje mesmo, sessões funcionando na sua aplicação ZF2.

Para o tutorial de hoje, vou assumir que você já possui uma versão implementada de projeto básico utilizando o ZF2Skeleton (esse tutorial ensina também como utilizar o ZfcUser, mas para nós, hoje, é irrelevante).

Nós vamos estender o módulo padrão Application para dar suporte a sessões ao resto da aplicação. Para integrar esse suporte, vamos precisar fazer três coisas:

  1. Atualizar o Module.php
  2. Criar um novo Container e armazenar alguns dados
  3. Recuperar os dados

Então vamos lá!

1. Atualizar o Module.php

Primeiramente, no module/Application/Module.php, nós precisamos fazer três coisas:

  • Adicionar duas declarações use
  • Criar uma nova função para inicializar a sessão
  • Chamar a função no onBootstrap

Então, adicione as seguintes declarações:

use Zend\Session\Config\SessionConfig;
use Zend\Session\Container;

E depois vamos criar a seguinte função:

public function initSession($config)
{
    $sessionConfig = new SessionConfig();
    $sessionConfig->setOptions($config);
    $sessionManager = new SessionManager($sessionConfig);
    $sessionManager->start();
    Container::setDefaultManager($sessionManager);
}

initSession cria uma nova variável SessionConfig, que permite fornece as configurações para o gerenciador de sessão. Nós configuramos algumas opções e passamos como o único argumento ao instanciar um novo SessionManager. Finalmente chamamos o método estático setDefaultManager na classe Container, pasando a nova variável $sessionManager.

Vamos dar uma olhada mais de perto.

  • Container: Fornece a core interface para gerenciar os dados da sessão.
  • SessionConfig: Manipula configurações de várias opções da sessão.
  • SessionManager: Manipula o gerenciamento da sessão, ou seja, tarefas como inicializar, verificar a existência, regenerar id, time to live, destroy e até validação.

No onBootstrap, adicionamos o seguinte:

$this->initSession(array(
    'remember_me_seconds' => 180,
    'use_cookies' => true,
    'cookie_httponly' => true,
));

Assim podemos garantir que a sessão estará sempre configurada e pronta para uso. Com esse código no seu devido lugar, agora temos suporte a sessão disponível, utilizando cookies para guardar as informações da sessão, persistindo ela, depois que o browser é fechado, por 3 minutos.

2. Criar um novo Container e armazenar alguns dados

$sessionTimer = new Container('timer');
$sessionTimer->endTime = (float) array_sum(explode(' ', microtime()));

Maravilha, agora que já cuidamos da configuração, precisamos começar a gravar e usar informações na sessão. Então criamos um novo container de sessão chamado timer e nele colocamos o valor atual de microtime() em uma variable de container chamada endTime.

Containers são utilizados para darmos namespaces para as informações de sessão. Um namespace padrão está disponível, mas eu acho que, exceto em aplicações simples, essa não é a melhor abordagem. Então, conseguindo separar a informação, conseguimos tornar mais fácil o desenvolvimento semântico e programático da nossa aplicação.

3. Recuperar os dados

Bom, agora que a informação está gravada, vamos recuperá-la e utilizá-la. Então, em algum ponto da nossa aplicação, vou assumir que existe um controller action.

$sessionTimer = new Container('timer');
if ($sessionTimer && $sessionTimer->executionTime) {
    return sprintf(
	"Página renderizada em %s segundos.",
	$sessionTimer->executionTime
    );
}

Aqui, como quando configuramos as informações anteriores, nós utilizamos um objeto Container. Enquanto no primeiro exemplo o container não existia e seria criado, agora que ele já existe nós temos acesso a ele.

Agora, como a maioria das variáveis, nós podemos interagir com ela, verificando se a propriedade que estamos procurando, executionTime, está disponível. Se estiver, nós utilizamos um sprintf para mostrar as informações de maneira formatada.

Juntando tudo

E aqui estamos nós! Com apenas um pouquinho de trabalho a mais, já temos acesso a sessões do jeito do Zend Framework 2, com um pequeno toque de sofisticação – quer seja com as informações sendo armazenadas no backend, com a implementação de namespaces de sessão ou q quantidade de opções de configuração disponíveis. É uma biblioteca muito bacana que faz com que o trabalho com sessões fique muito mais simples.

No próximo tutorial vamos aprender como proteger as sessões contra session hijacking a partir dos validadores disponíveis e como utilizar armazenamento em diferentes backends como servidores de cache ou bancos de dados.

Espero que tenham gostado!

Um abraço a todos e fiquem com Deus.
Rafael Jaques

Adaptado do original de Matthew Setter: http://www.masterzendframework.com/sessions/using-sessions-in-zend-framework-2-part-1

Slides da palestra PHP na Tela Escura

PHP na Tela Escura

Apresentei ontem no 15º Fórum Internacional de Software Livre a minha palestra intitulada PHP na Tela Escura: Aplicações Poderosas em Linha de Comando.


Link para os slides: http://pt.slideshare.net/rafajaques/php-na-tela-escura-aplicaes-poderosas-em-linha-de-comando

Abraços a todos e fiquem com Deus!

PHPit e PHPRS no FISL 15!

FISL

Salve, galera!

Estou aqui para divulgar o 15º Fórum Internacional de Software Livre, aka FISL, que ocorrerá do dia 7 ao dia 10 de Maio de 2014 em Porto Alegre – RS.

Nessa edição estarei comandando duas atividades:

  • No dia 9, sexta-feira, apresentarei a palestra PHP na Tela Escura: Aplicações Poderosas em Linha de Comando na sala 41B às 9h (da manhã, hein!).
  • No dia 10, sábado, juntamente com o Galvão, vou coordenar o 1º Encontro Comunitário do PHPRS, também às 9 horas da matina, porém na sala 41C.

Além disso, você poderá me encontrar no stand do PHPRS que estará na área de comunidades do FISL.

Aproveite para vir apresentar suas lightning talks, conhecer a galera do PHP e trocar ideias. Espero todos vocês!

Você pode acessar o site do FISL 15 ou a programação do evento.

Um abraço a todos e fiquem com Deus.