PHP 5.5.0 Beta 1

Artigo que apresenta as novidades do PHP 5.5.0 beta1, como a introdução do Zend Optimizer+ e a função array_column.

Introdução

Atenção: o PHP 5.5 foi lançado em 20/06/2013. Confira as últimas notícias sobre o Lançamento do PHP 5.5.0.

Nos últimos meses, escrevi sobre as versões Alpha do PHP 5.5, que representa a nova "família" de versões 5.5.X. A princípio, seriam lançadas apenas quatro versões alpha, mas a equipe de desenvolvimento optou por lançar o Alpha 5 e o Alpha 6, com algumas correções e melhorias. Hoje, porém, foi lançada a primeira versão Beta. E, para nossa alegria, foram incorporadas algumas melhorias, além das correções. Lembrando que esta versão ainda não deve ser usada em produção. É apenas uma versão para testes.

Melhorias do PHP 5.5.0 Beta 1

Zend Optimizer+

A principal melhoria introduzida no PHP 5.5.0 Beta 1 foi a integração nativa do PHP com o Zend Optimizer+, que é uma extensão Zend que provê cache de código intermediário do PHP. Ele serve para aumentar a performance da aplicação. Para quem ainda não sabe, o PHP é uma linguagem interpretada, mas antes da execução do código, o interpretador gera um código intermediário. O cache desse código intermediário ajuda muito, pois evita que o interpretador precise interpretar todo código-fonte a cada execução.

Até a integração, esta extensão tinha o código fechado, mas era distribuída gratuitamente. Agora, além de ser integrada ao PHP, sua licença passou a ser livre, igual a licença do PHP.

Para utilizar o Zend Optimizer+, basta compilar o PHP com a diretiva --enable-opcache. Depois, basta configurar o php.ini, pedindo para incluir a extensão zend "opcache.so" (no Linux) ou "opcache.dll" (no Windows), conforme exemplo abaixo:

zend_extension = /usr/lib64/extensions/no-debug-non-zts-20121212/opcache.so 

Note que você precisa passar o caminho completo para o arquivo binário que contém a extensão e esse caminho pode variar de acordo com a sua instalação.

Depois, basta inicializar seu servidor HTTP e conferir se a extensão foi habilitada com sucesso. No terminal, basta digitar o comando php -m e verificar se ao final da lista, aparece:

[Zend Modules]
Zend OPcache

Ou então executar php -v e checar se aparece algo como:

PHP 5.5.0beta1 (cli) (built: Mar 21 2013 19:28:56) 
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.5.0-dev, Copyright (c) 1998-2013 Zend Technologies
    with Zend OPcache v7.0.1-dev, Copyright (c) 1999-2013, by Zend Technologies

No ambiente web, você pode criar um arquivo que executa a função phpinfo() e checar se aparece a sessão "Zend OPcache".

Depois, basta configurar as diretivas da extensão no arquivo php.ini, para que tire o melhor proveito de seu hardware. Se fizer alguma alteração, lembre-se de reiniciar o servidor HTTP. Um exemplo de configuração é este abaixo:

opcache.memory_consumption = 128
opcache.interned_strings_buffer = 8
opcache.max_accelerated_files = 4000
opcache.revalidate_freq = 60
opcache.fast_shutdown = 1
opcache.enable_cli = 1

Para conhecer detalhes sobre cada diretiva, você pode consultar o link README do Zend Optimizer+. Muita gente conhece o APC, que provê funcionalidades semelhantes. Porém, os benchmarks apontam o Zend Optimizar+ como sendo ainda melhor.

A função array_column

A outra melhoria introduzida no PHP 5.5.0 Beta 1 foi a função array_column. Ela serve para obter determinada coluna de uma matriz. Algo muito simples de se fazer, mas agora é nativo da linguagem e possui uma performance melhor do que implementando manualmente. Vamos ver um exemplo de uso:

$matrizDisciplinas = [
    ['nome' => 'Algoritmos e Estruturas de Dados', 'codigo' => 'AED', 'creditos' => 4],
    ['nome' => 'Banco de Dados', 'codigo' => 'BD', 'creditos' => 4],
    ['nome' => 'Arquitetura de Computadores', 'codigo' => 'ARQ', 'creditos' => 6]
];

// Obtendo um array com os codigos das disciplinas
$codigos = array_column($matrizDisciplinas, 'codigo');

var_dump($codigos);
/*
array(3) {
  [0]=>
  string(3) "AED"
  [1]=>
  string(2) "BD"
  [2]=>
  string(3) "ARQ"
}
*/

Além disso, poderíamos passar um terceiro parâmetro com a coluna que gostaríamos de usar para indexar o array retornado. Com a matriz do exemplo anterior, poderíamos criar facilmente um array indexado pelo código da disciplina e apontando para o nome da disciplina:

$matrizDisciplinas = [
    ['nome' => 'Algoritmos e Estruturas de Dados', 'codigo' => 'AED', 'creditos' => 4],
    ['nome' => 'Banco de Dados', 'codigo' => 'BD', 'creditos' => 4],
    ['nome' => 'Arquitetura de Computadores', 'codigo' => 'ARQ', 'creditos' => 6]
];

// Obtendo um array com os codigos das disciplinas
$nomes = array_column($matrizDisciplinas, 'nome', 'codigo');

var_dump($nomes);
/*
array(3) {
  ["AED"]=>
  string(32) "Algoritmos e Estruturas de Dados"
  ["BD"]=>
  string(14) "Banco de Dados"
  ["ARQ"]=>
  string(27) "Arquitetura de Computadores"
}
*/

Alterar o nome dos processos executados com PHP-CLI

Uma última melhoria foi a possibilidade de mudar o nome dos processos executados via PHP-CLI (terminal).

O funcionamento é muito simples: basta utilizar as funções cli_set_process_title e cli_get_process_title para definir e obter o título do processo, respectivamente. Assim, podemos diferenciar uma execução de outra facilmente, conforme o exemplo, que definiu o título "teste do rubens":

$ ps -aef | grep teste
rubens    2719  2764  2 20:33 pts/0    00:00:00 teste do rubens

Outras melhorias passadas

Além das melhorias do Beta 1, vale a pena citar algumas melhorias do Alpha 5 e Alpha 6:

  • Possibilidade de configurar o diretório de dados temporários pela diretiva sys_temp_dir no php.ini.
  • Melhorias na extensão MySQLi:
    • Introdução do método mysqli_begin_transaction ou mysqli::begin_transaction.
    • Introdução dos métodos mysqli_savepoint e mysqli_release_savepoint ou mysqli::savepoint e mysqli::release_savepoint
  • Introdução das funções socket_recvmsg, socket_sendmsg e socket_cmsg_space na extensão socket.

0 comentários