Lambda Functions/Closures no PHP 5.3
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.
Artigos Relacionados:
Estou também no LinkedIn
Não há muito o que dizer além do que o próprio título do post. Muitos me avisaram que o LinkedIn era uma ferramenta profissional muito útil, mas nunca levei tanta fé. Porém, esses dias recebi o convite de um amigo e resolvi dar uma olhada por lá. Acabei encontrando profissionais com quem trabalhei e que, com certeza, estão fora da "onda" da internet, isto prova que a ferramenta deixou de ser hype para se tornar referência no assunto.
Se você ainda não está lá, recomendo entrar. Quando passar lá dá uma olhada no meu profile.
Artigos Relacionados:
CONAPHP – Congresso Nacional de PHP 2008
A comunidade PHP brasileira já tem seu ponto de encontro em 2008 para troca de conhecimento e networking. Trata-se do CONAPHP, o Congresso Nacional de PHP, que ocorrerá integrado ao CONISLI, evento já conhecido de software livre, nos dias 18 e 19 de outubro na FIAP de São Paulo.
Segundo o site do evento, já estão confirmadas as presenças internacionais de Andrei Zmievski, responsável pela criação do Smarty Templates e PHP-GTK, e César Rodas, vencedor do PHP Programming Innovation Award de 2007 organizado pelo site PHPClasses e participante do Google Summer of Code (GSoC) 2008.
Este evento está sendo organizado pelo grupo formado a partir da união das comunidades locais de PHP no Brasil, isto é, um evento da comunidade para a comunidade.
Mais informações sobre o evento você vê no site oficial.
Artigos Relacionados:
Estendendo Helpers no Kohana Framework
Os helpers no Kohana Framework não passam de classes estáticas (que não precisam ser instanciadas), e você pode precisar adicionar funcionalidades à um método ou criar suas próprias funcionalidades. Para isso, você vai precisar criar uma extensão do Helper.
O primeiro passo é ir até o diretório da sua aplicação (por padrão ele é chamado application) e criar um diretório chamado helpers, caso ele ainda não exista, claro, e criar um arquivo chamado MY_form.php. É importante ressaltar que o prefixo MY_ pode ser configurado.
No primeiro exemplo, vamos estender o form helper do framework para criar o input date. Neste caso, utilizamos o plugin datePicker para jQuery (biblioteca javascript) onde, para colocar o seletor de data (calendário) ao lado do combo, basta definir uma classe "date-pick" para o elemento HTML. Vamos ao código:
<?php defined('SYSPATH') or die('No direct script access.');
class form extends form_Core
{
/**
* Creates an HTML form input date tag.
*
* @param string|array input name or an array of HTML attributes
* @param string input value, when using a name
* @param string a string to be attached to the end of the attributes
* @return string
*/
public static function date($data, $value = '', $extra = '')
{
if ( ! is_array($data))
{
$data = array('name' => $data);
}
// Insere atributo class com valor date-pick
$data['class'] = (isset($data['class'])) ? $data['class'].' date-pick' : 'date-pick';
return form::input($data, $value, $extra);
}
} // End form class
Dessa forma, ao usar o código abaixo, será gerado um input text com a classe "date-pick", e o jQuery faria todo o serviço:
<?php echo form::date('dt_aniversario'); ?>
Você também não terá problemas caso passe outros atributos:
<?php echo form::date( array('name'=>'dt_aniversario', 'title'=>'Data de Aniversário') ); ?>
Na imagem abaixo segue um exemplo do funcionamento do campo data:

Artigos Relacionados:
Problemas na Dreamhost
Peço desculpas aos visitantes do blog por estes dias de inconsistência no acesso e problemas no layout do blog. Fui afetado por um problema grave em dois servidores da DreamHost e só após a mudança de servidor que as coisas estão voltando à normalidade.
Logo voltaremos à programação normal!
