extract
(PHP 4, PHP 5)
extract — Importa variáveis para a tabela de símbolos a partir de um array
Descrição
$var_array
[, int $extract_type
[, string $prefix
]] )Importar variáveis a partir de um array para a tabela de símbolos corrente.
extract() verifica cada chave e vê se ela tem um válido nome de variável. Também verifica por colisões com já existente variáveis na tabela de símbolo.
Parâmetros
-
var_array -
Um array associativo. Esta função trata chaves como nome de variáveis e valores com os valores da variáveis. Para cada par chave/valor ela cria uma variável na atual tabela de símbolo, seguindo os parâmetros
extract_typeeprefix.Você precisa usar um array associativo, um array numericamente indexado não irá produzir resultado até que você use
EXTR_PREFIX_ALLouEXTR_PREFIX_INVALID. -
extract_type -
A forma como inválida/chaves numéricas e colisões são tratadas é determinada por
extract_type. Pode ser um dos seguintes valores:-
EXTR_OVERWRITE - Se houver uma colisão, sobrescreve a variável existente.
-
EXTR_SKIP - Se houver uma colisão, não sobrescreve a variável existente.
-
EXTR_PREFIX_SAME -
Se houver uma colisão, adiciona um prefixo ao nome da
variável definido pelo argumento
prefix. -
EXTR_PREFIX_ALL -
Adiciona um prefixo ao nome de todas as variáveis definido por
prefix. -
EXTR_PREFIX_INVALID -
Adiciona um prefixo definido por
prefixapenas para variáveis como nomes inválidos ou numéricos. -
EXTR_IF_EXISTS - Só sobrescreve a variável se ela já existe na tabela de símbolos corrente, caso contrário, não faz nada. Isso é útil quando se quer definir uma lista de variáveis válidas e então extrair só as que foram definidas em $_REQUEST, por exemplo.
-
EXTR_PREFIX_IF_EXISTS - Só cria nomes de variáveis usando o prefixo se na tabela de símbolos já existe uma variável com o nome sem esse prefixo.
-
EXTR_REFS -
Extrai variáveis como referências, ou seja, os valores das variáveis
importadas ainda estarão referenciando os valores do parâmetro
var_array. Essa opção pode ser usada sozinha ou em conjunto com as outras usando o operador 'ou' emextract_type.
Se
extract_typenão for especificado, é assumido o valorEXTR_OVERWRITE. -
-
prefix -
Note que
prefixsó é necessário seextract_typeforEXTR_PREFIX_SAME,EXTR_PREFIX_ALL, ouEXTR_PREFIX_INVALIDouEXTR_PREFIX_IF_EXISTS. Se o nome com o prefixo não for um nome de variável válido, ela não será importada para a tabela de símbolos. Prefixos são automaticamente separados da chave do array pelo caractere underscore.
Valor Retornado
Retorna o número de variáveis importadas com sucesso para a tabela de símbolo.
Changelog
| Versão | Descrição |
|---|---|
| 4.3.0 |
EXTR_REFS foi adicionado.
|
| 4.2.0 |
EXTR_IF_EXISTS e EXTR_PREFIX_IF_EXISTS
foram adicionados.
|
| 4.0.5 |
Esta função agora retorna um número de variáveis extraídas.
EXTR_PREFIX_INVALID foi adicionado.
EXTR_PREFIX_ALL inclue variáveis numéricas também.
|
Exemplos
Example #1 Exemplo da extract()
Uma possível utilização de extract() é na importação de variáveis contidas num array associativo retornado pela função wddx_deserialize().
<?php
/* Suponha que $var_array é um array retornado pela função
wddx_deserialize */
$tamanho = "grande";
$var_array = array ("cor" => "azul",
"tamanho" => "medio",
"forma" => "esfera");
extract ($var_array, EXTR_PREFIX_SAME, "wddx");
echo "$cor, $tamanho, $forma, $wddx_tamanho\n";
?>
O exemplo acima irá imprimir:
azul, grande, esfera, medio
O $tamanho não foi sobrescrito, porque nós especificamos
EXTR_PREFIX_SAME, o que resultou na criação da variável
$wddx_tamanho. Se EXTR_SKIP fosse
utilizado, então $wddx_tamanho não seria criada.
EXTR_OVERWRITE teria feito com que
$tamanho tivesse o valor "medio", e
EXTR_PREFIX_ALL resultaria em novas variáveis
com os nomes $wddx_cor, $wddx_tamanho, e
$wddx_forma.
Notas
Não use extract() em dados não confiáveis, como
entrada de usuário ($_GET, ...). Se você por exemplo, quer executar
um código antigo temporariamente com
register_globals,
certifique-se de que está usando um dos valores de
extract_type que não fazem sobreescrita como
EXTR_SKIP e tenha cuidado para que extraia
na mesma ordem que é definida em
variables_order no
php.ini.