A morte do PHP 4

August 14th, 2008 by newton

A versão 4 do PHP, lançada no ano 2000, foi a que contribuiu definitivamente para que ela se tornasse o que é hoje, teve sua morte decretada no dia 07/08/08 (quase que cai no dia 8 também) com o lançamento de sua última release, a 4.4.9.

Esta versão, que trouxe consigo o primeiro Zend Engine, contribuiu para o crescimento do PHP até ele se tornar a linguagem web mais utilizada no mundo, segundo ranking da Tiobe Software e, apesar de estar perdendo espaço continuamente para outras versões mais novas, ainda está presente em diversos ambientes espalhados por aí.

A princípio, a sugestão dos desenvolvedores da linguagem era de que novas releases do PHP 4 só fossem realizadas para correções de falhas de segurança, mas chegaram a conclusão de que isto já vinha sendo feito no último ano, e que não havia mais razão para dar continuidade ao desenvolvimento.

Sinceramente, acredito que esta seja uma decisão até tardia, uma vez que o PHP 5 foi lançado em 2004. A morte da versão anterior deve estimular os desenvolvedores e administradores de sistemas a atualizar suas aplicações/servidores, até por uma questão de segurança, além de todos os benefícios já envolvidos em relação à evolução do PHP.

Vida longa ao PHP 5+, e que venha o 6.

Lançado Kohana Framework 2.2

August 9th, 2008 by newton

Os desenvolvedores do Kohana escolheram uma data curiosa para o lançamento da versão 2.2 do framework, 08/08/08, competindo com a abertura dos jogos olímpicos da China (que ganhou medalha de ouro chegando na frente, uma vez que o dia lá começa bem antes do que por aqui).

Com a nova versão a promessa de abandonar ainda mais alguns vestígios do seu “pai”, o Code Igniter, como a remoção da classe Loader. Além disso, novos módulos foram implementados como o de Compressão de Arquivos, Integração com Google Maps e Captcha, dentro outros.

Visite o site oficial do Kohana para mais informações ou para fazer o download da nova versão.

Lambda Functions/Closures no PHP 5.3

August 5th, 2008 by newton

Das diversas alterações anunciadas no lançamento da Alpha 1 do PHP 5.3, a que mais me chamou a atenção foi, sem dúvidas, a implementação de “Lambda Functions/Closures“. Mais até do que a implantação de Namespaces, que foi tão discutida por aí que não deve ter causado nenhum impacto mesmo.

Se você ao ler isso, assim como eu ao ler a notícia no php.net, está se perguntando: “ok, mas o que é isso afinal?”, acho que um trecho de exemplo de código vale mais do que mil palavras:

$variavel = function () { echo "Hello World"; };
$variavel ();

Pronto. Isso é, nada mais, nada menos, do que um Hello World com “lambda function”. Você pode estar pensando que já viu isso em algum lugar e tem toda razão. Se você desenvolve JavaScript há algum tempo, provavelmente já viu esse tipo de atribuição, principalmente para adicionar uma funcionalidade a um evento em um objeto.

Assim como no JavaScript, você poderá passar parâmetros para a função. Usando mais uma vez o famoso Hello World:

$variavel = function ($string) { echo $string; };
$variavel ("Hello World");

Indo mais além, você pode definir quais variáveis de fora do escopo da função, serão utilizadas lá dentro, e têm comportamento idêntico ao dos parâmetros de uma função, isto é, elas são, na verdade, copiadas para dentro do escopo da função e, caso queira, você pode passá-las por referência, utilizando o caracter &:

$hello = "Hello";
$world = "Newton";
$variavel = function () use ($hello, &$world)
{
	$hello = "Hi";
	$world = " World";
	echo $hello . $world; // echoa "Hi World"
};
$variavel ();
echo $hello . $world; // echoa "Hello World"

No exemplo acima, definimos as strings $hello e $world. Depois, chamamos a função, informando que usaríamos as mesmas variáveis, sendo que $world está sendo passada por referência. Ainda dentro da função alteramos as duas e exibimos na tela. Após a execução da função, exibimos novamente as variáveis $hello e $world, sendo que a primeira foi alterada apenas dentro do escopo da função e a segunda, passada por referência, sofreu alteração (incluímos o espaço ali pra quem não notou).

Muito interessante a implementação da chamada da função, que acabou ganhando aplicação em objetos, que, ao serem chamados no formato $objeto(), chama automaticamente o método mágico __invoke() da classe:

class Objeto
{
	public function __invoke()
	{
		echo "Hello Objeto";
	}
}
$objeto = new Objeto
$objeto (); // exibe na tela "Hello Objeto"
// lembro que "echo $objeto;" continuará chamando __toString()

Confesso que, a primeira vista, não consegui achar utilidade nenhuma pra isso, além de uma forma diferente de trabalhar com funções, principalmente em chamadas de callbacks (call_user_func()), onde você passaria uma variável ao invés de um array ou uma string. Porém, comentando o assunto por aí, alguns desenvolvedores se mostraram entusiasmados com a novidade. Minha recomendação é aquela padrão: use com moderação, somente em casos onde de fato for relevante.

Mais detalhes sobre lambda funcions/closures no wiki do php.net, ou ainda, no anúncio do lançamento da 5.3 alpha 1.

Go PHP 5: Diminuiram as desculpas

May 23rd, 2008 by newton

Comentei aqui em julho do ano passado sobre o projeto Go PHP 5, que tinha como objetivo migrar diversas aplicações famosas do PHP para PHP 5 Strict, além de divulgar os hospedeiros que passariam a oferecer suporte para a “nova” (lançada em 2004) versão do PHP.

O projeto se encerrou em fevereiro deste ano, mas só me lembrei de dar uma olhada nos resultados agora. Ao que parece, diminuiram as desculpas pra quem ainda não migrou. Além de diversos hosts que passaram a oferecer a nova versão (o que, convenhamos, é o mínimo que poderiam fazer), muitas aplicações famosas também foram migradas. Dentre elas:

Dentre outros como ZenCart, Propel, Typo3, PHP Unit.

Veja a lista completa de projetos e de hosts no site oficial do Go PHP 5.

Relacionamento entre tabelas com ORM do Kohana Framework

March 27th, 2008 by newton

Achei o post do Adler sobre relacionamento entre tabelas com o Zend Framework bem bacana e didático. Estou me devendo uma olhada no ZF, que já está na versão 1.5.1 (enquanto escrevo este artigo), mas isso deve ficar mais pro final do ano.

Resolvi então fazer uma espécie de série, sobre ORMs dos frameworks. Quem aí trabalhar com CakePHP, Symfony, Doctrine, Lumine ou qualquer outro framework/orm, faça um artigo sobre isso e vamos fazer uma rede de links. Pode ser muito útil pra comunidade, principalmente pra quem procura um framework. Por aqui, vou falar do Kohana framework. Mãos à obra:

No Kohana, para usar o ORM você precisa seguir uma padronização de nomes de tabelas e das chaves estrangeiras, então, nossas tabelas de UF e Cidade ficariam assim:

ufs
id - INT - PRIMARY KEY
nome - Varchar(100)

cidades
id - INT - PRIMARY KEY
nome - Varchar(100)
uf_id - INT - FOREIGN KEY

Sim, as tabelas precisam estar no plural (no padrão americano), e não quero entrar no mérito se isso é bom ou ruim. Continuemos o exemplo mostrando como seriam nossas classes para cada uma das entidades, já montando os arrays para os relacionamentos:

class Uf_Model extends ORM
{
   protected $has_many = array('cidades');
}

class Cidade_Model extends ORM
{
  protected $belongs_to = arary('uf');
}

No Kohana, as classes de modelo devem ter o sufixo “_Model”, e aqui extendemos a classe ORM. Aqui uma outra controvérsia. Quando declaramos o array has_many, colocamos a entidade no plural, mas quando declaramos belongs_to, está no singular. Apesar de fazer sentido, é preciso ficar atento pra não confundir as coisas. Você ainda pode ter os seguintes relacionamentos:

  • has_one
  • belongs_to_many
  • has_and_belongs_to_many

Nos resta agora demonstrar um exemplo prático de como trabalhar com as duas entidades. Confesso que gostei muito mais da implementação do belongs_to, que comento mais pra baixo, mas este modelo também é bastante prático. Vejamos um controller de exemplo:

class Index_Controller extends Controller
{
   public function index()
   {
      // instancia o objeto UF com id 1
      $obj_uf = new Uf_Model(1);

      // Pesquisa pelas cidades desta UF
      $cidades = $obj_uf->find_related_cidades();

      // Percorre as cidades exibindo na tela
      foreach ($cidades as $cidade)
      {
        echo $cidade->nome.'<br />';
      }
   }
}

Poderíamos usar o ORM::factory() para recuperar a uf, que usa o method chaining do PHP:

$obj_uf = ORM::factory('uf')->find(1);

Agora vou demonstrar algo que achei muito prático e que poupa bastante tempo de codificação, que é a recuperação do nome da UF a partir de uma cidade, veja este outro exemplo de controller:

class Index_Controller extends Controller
{
   public function index()
   {
      // instancia o objeto Cidade com ID 1
      $obj_cidade = new Cidade_Model(1);

      // Exibindo nome da Cidade e UF na tela
      echo 'Cidade: '. $cidade->nome .'<br />';
      // O objeto uf já é inserido automagicamente no objeto cidade
      echo 'UF: '. $cidade->uf->nome;
   }
}

Isso mesmo que você leu. Não preciso fazer absolutamente nada pra recuperar a UF, o framework faz isso automaticamente através do método mágico __get(). Como eu disse antes, muito prático.

Conclusão

Em um comparativo com o tutorial do Zend Framework, creio que o Kohana cumpriu o seu papel de tornar o desenvolvimento mais ágil, porém, perde em organização e poder das funcionalidades de mapeamento dos objetos.

E vocês, o que acharam dessa implementação?

Ainda falta Marketing para o PHP

November 4th, 2007 by newton

Durante a pesquisa de tecnologias para o meu projeto final, procurei por referências que confirmavam as vantagens da utilização do PHP, como baixa curva de aprendizado, portabilidade, escalabilidade e etc, assim como pesquisei de outras ferramentas que pretendo utilizar no projeto.

Fiquei surpreso em constatar que, apesar da popularidade, o PHP ainda tem muita deficiência nesta área de “marketing”. Expor suas qualidades e benefícios é o básico para qualquer produto ou serviço.

A primeira decepção foi não ter encontrado absolutamente nada no site oficial do php e, depois, no site da Zend, “the php company”.

Se você visitar o site do MySQL, você encontra rapidamente um link chamado “Why MySQL?”, que descreve uma série de vantagens na utilização deste banco. Isso se repete em diversas outras ferramentas, como o JUDE, DBDesigner e a linguagem Ruby, dentre outros.

Pra encontrar estas informações sobre o PHP, é preciso fazer uma pesquisa um pouco mais elaborada no Google, e confiar em resultados de pesquisa desconhecidos, necessitando dar mais um passo pra descobrir a confiabilidade da fonte.

Se tivéssemos uma lista como essa em sites oficiais do PHP, a informação teria uma credibilidade muito maior.

Conheça a Standard PHP Library - SPL

October 18th, 2007 by newton

O André Metzen publicou um texto bacana sobre a Standard PHP Library, que é um conjunto de classes e interfaces do PHP 5, criadas pra solucionar alguns problemas nossos do dia-a-dia utilizando Objetos, ao invés das já conhecidas funções nativas do PHP.

Você também encontra informações sobre a SPL no manual do PHP.

Novidades para o PHP

October 15th, 2007 by newton

ZendCon 2007

Bons ventos sopraram para a comunidade PHP na última semana. As notícias do ZendCon 2007 indicam que o PHP está cada vez mais preparado para as enterprise applications e aplicações de missão-crítica, tendo o apoio das gigantes Oracle, IBM e Microsoft para isso.

A Oracle já divulgou o lançamento do novo driver de conexão para o PHP, oferecendo suporte às novas funcionalidades da versão 11g do banco de dados. Ainda no ramo dos bancos de dados, a Microsoft também está abrindo as portas do SQL Server 2005 para o PHP. Ambos os drivers devem ser inseridos nos próximos Zend Cores.

Além da extensão das parcerias com Oracle e Microsoft, a IBM também anunciou o lançamento de uma ferramenta para usuários finais realizarem Mashups de web services, permitindo a criação de aplicações. A ferramenta foi criada com Zend Framework (PHP 5), DB2 e Zend Core for IBM.

Tudo isso resulta em ganho de mercado para a Zend, para o PHP e, claro, pra os especialistas na linguagem. Vida longa.

Fontes: ARNnet, eWeek e SD Times.

Grato ao Adler pelos links na lista php-brasilia.

Rodando Processos em Background com PHP

August 15th, 2007 by newton

Quando precisamos executar processamentos demorados com PHP, fazer com que o usuário dispare estes eventos através de uma página web pode não ser uma boa idéia, pois a conexão pode acabar em time-out e, além do usuário nunca ter certeza se o processo terminou ou não, o servidor web ainda pode bloquear o acesso daquele cliente por algum tempo.

Este era o problema que estávamos enfrentando em um sistema e procurávamos uma solução.

A primeira idéia foi a de usar a biblioteca de Funções de Controle de Processos do próprio PHP, porém, o manual informa que abrir uma nova thread rodando a aplicação em um servidor web pode causar comportamentos inesperados. Como também não temos controle das configurações do Apache, descartamos essa idéia a princípio.

Outra idéia foi utilizar a função exec() para executar o script, mas ainda tí­nhamos um problema, pois o PHP aguarda o retorno desta função para continuar o processamento. Este problema pode ser contornado utilizando uma solução do próprio Linux. Basta utilizar o caracter & (e-comercial) ao final da linha de comando dentro da função shell para que ele seja executado em uma nova thread.

Assim, o PHP recebe o retorno do exec() e finaliza a execução, enquanto o processo de geração do relatório segue em background sem interferir na requisição do usuário.

Projeto Go PHP5

July 6th, 2007 by newton

Um grupo de desenvolvedores anunciou o projeto Go PHP 5. Uma força tarefa para migrar grandes aplicações open source construídas em versões antigas do PHP, para incentivar a atualização para o PHP 5.

O projeto envolve a atualização de algumas das aplicações mais utilizadas na comunidade como a ferramenta administrativa do MySQL PHPMyAdmin, o CMS Typo3, CMS e framework Drupal e o framework Symfony e a participação de diversos hospedeiros (um português, mas nenhum brasileiro até o momento).

Segundo o grupo, existe um ciclo que impede a migração para o PHP 5. De um lado os desenvolvedores não podem desenvolver na “nova” versão pois a maioria dos servidores usa o PHP 4, e do outro lado os hospedeiros não podem migrar para o PHP 5 pois muitas aplicações foram desenvolvidas para o PHP 4.

Para quebrar este ciclo, as aplicações serão atualizadas para que, em 5 de fevereiro de 2008, todas estejam compatíveis, pelo menos, com a versão 5.2.0. Do outro lado, os hospedeiros participantes do projeto irão disponibilizar, também até a mesma data, pelo menos a versão 5.2.0 em seus servidores.

Acho também que já passou da hora de abandonarem o PHP 4, uma vez que já estão discutindo o PHP 6 a algum tempo, e até agora o PHP 5 ainda não está instalado na maior parte dos servidores na web.

Fechar
Envie por e-mail