Publicidade

Lomadee, uma nova espécie na web. A maior plataforma de afiliados da América Latina.

segunda-feira, 21 de janeiro de 2008

Variáveis application em PHP

Trabalhava com ColdFusion até o final do ano passado, e desde então estou usando PHP. Os defensores do código aberto não precisam se animar, porque não foi uma escolha minha. O PHP é a linguagem padrão onde estou trabalhando agora, se fosse por mim teria continuado com o CF. Nada contra o PHP, é uma linguagem excelente. Mas o ColdFusion tem muito mais recursos. Um deles é o escopo de variáveis application, ou seja, variáveis que ficam disponíveis a todas as sessões dos usuários, mantendo o valor.

Na minha opinião essa é uma grande falha do PHP. Além do CF, ASP e JSP também tem esse escopo. Parece (parece...) que a versão 6 do PHP vai incorporar esse recurso. Enquanto isso, encontrei a página do Leo Singleton. Ele desenvolveu uma função que cria o escopo application no PHP. As variáveis ficam acessíveis como outras variáveis de escopo, como $_SESSION[]. Ou seja, basta usar $_APP[]. Simples, não? A página dele tem mais explicações (em inglês), mas basicamente o uso é assim:

Crie o arquivo app.php, com o conteúdo abaixo:
 define("APP_DATA_FILE","/tmp/application.data");

function application_start () {
global $_APP;

// if data file exists, load application
// variables
if (file_exists(APP_DATA_FILE))
{
// read data file
$file = fopen(APP_DATA_FILE, "r");
if ($file)
{
$data = fread($file,
filesize(APP_DATA_FILE));
fclose($file);
}

// build application variables from
// data file
$_APP = unserialize($data);
}
}

function application_end () {
global $_APP;

// write application data to file
$data = serialize($_APP);
$file = fopen(APP_DATA_FILE, "w");
if ($file)
{
fwrite($file, $data);
fclose($file);
}
}
Nas páginas em que você for usar alguma variável application, coloque as linhas a seguir no início do arquivo:
 include("app.php");
application_start();
E no final do arquivo:
 application_end();
Pronto, agora você pode usar o escopo como a seguir:
 echo $_APP["contador_visitas"]++;
Infelizmente, as variáveis de application criadas com esse recurso não aceitam objetos. Ou seja, não dá pra instanciar um classe em uma variável $_APP[].

_\\//

Nenhum comentário:

Postar um comentário