Embarcando nessa onda de posts semanais que uma galera de blogueiros fazem, resolvi criar a seção “PHP From Hell”. Vou tentar - eu disse tentar
- postar alguma coisa dessa seção toda sexta-feira. A idéia é postar dicas de funcionalidades do PHP que pouca gente ( incluindo yo hehehe ) conhece.
Vou começar falando da função extract. Esta função importa elementos de um array associativo para a tabela de símbolos. Trocando em miúdos, os índices do array passam a ser variáveis cujo os valores são os seus correspondentes no array. Basicamente é alguma coisa parecida com o register_globals com câmbio manual :D.
Na prática a coisa funciona assim:
$marca = “Ferrari”;
$origem = “Los Cabos”;
$carros_collection = array(”marca”=>”Audi”,”ano”=>”2008″,”modelo”=>”A4″);
$busu_collection = array(”origem”=>”Lapa”,”destino”=>”Liberdade”);
extract($busu_collection, EXTR_SKIP);
echo “<BR/>$marca, $ano, $modelo, $tidoc_marca”;
echo “<BR/>$origem, $destino, $tidoc_origem”;
O resultado vai ser:
Los Cabos, Liberdade
Mais de onde veio $tidoc_marca e onde foi parar o valor Lapa? Simples Padawan … Como você está inserindo elementos na tabela de símbolos, corre o risco de você cagar alguma coisa. Pra que isso não aconteça, você usa o parâmetro extract_type. É esse parâmetro que indica a forma que as colisões serão tratadas. Em nosso exemplo usamos EXTR_PREFIX_ALL e EXTR_SKIP, no primeiro, se já houver uma variável com o mesmo nome do elemento incorporado, o nome da nova variável irá receber o prefixo indicado no terceiro parâmetro. Com EXTR_SKIP, se ocorrer colisões, o novo valor é descartado.
Outras opções são:
EXTR_OVERWRITE, EXTR_PREFIX_ALL, EXTR_PREFIX_INVALID, EXTR_IF_EXISTS, EXTR_PREFIX_IF_EXISTS, EXTR_REFS.
Recomendo dar uma lida na documentação: http://www.php.net/manual/pt_BR/function.extract.php
