(PHP 3 >= 3.0.7, PHP 4, PHP 5)
extract --
Importa le variabili nella tabella dei simboli
Descrizione
int
extract ( array var_array [, int extract_type [, string prefix]] )
Questa funzione viene usata per importare delle variabili da un array nella
tabella dei simbloi corrente. Riceve un array associativo
var_array e interpreta le chiavi come nomi di
variabile e i valori come valori di variabile. Per ogni coppia chiave/valore
verrà creata una variabile nella tabella dei simboli corrente, coerentemente con
i parametri extract_type e
prefix.
Nota:
Dalla versione 4.0.5 questa funzione restituisce il numero di
variabili estratte.
Nota:
EXTR_IF_EXISTS e EXTR_PREFIX_IF_EXISTS sono stati introdotti nella versione 4.2.0.
Nota:
EXTR_REFS è stata introdotta nella versione 4.3.0.
extract() controlla ogni chiave per stabilire se
costituisce un nome valido di variabile e se ci sono collisioni con
variabili già esistenti nella tabella dei simboli. Il modo in cui vengono trattate le
chiavi invalide/numeriche e le collisioni è determinato da
extract_type. Può essere uno dei
seguenti valori:
- EXTR_OVERWRITE
Se avviene una collisione, sovrascrive la variabile esistente.
- EXTR_SKIP
Se avviene una collisione, non sovrascrive la variabile
esistente.
- EXTR_PREFIX_SAME
Se avviene una collisione, mette come prefisso al nome della variabile il
parametro prefix.
- EXTR_PREFIX_ALL
Mette come prefisso di tutte le variabili il parametro
prefix. Dal PHP 4.0.5 questo avviene
anche per i valori numerici.
- EXTR_PREFIX_INVALID
Mette come prefisso, solo per i nomi di variabili invalidi/numerici,
il parametro prefix. Questa opzione è stata aggiunta in
PHP 4.0.5.
- EXTR_IF_EXISTS
Sovrascrive la variabile solo se già esiste nella
tabella dei simboli, altrimenti non fa nulla. Questo è utile
per definire una lista di variabili valide e quindi estrarre
solo quelle variabili definite in $_REQUEST, per
esempio. Questa opzione è stata aggiunta in PHP 4.2.0.
- EXTR_PREFIX_IF_EXISTS
Crea nomi di variabili con il prefisso solo se la versione senza prefisso
della stessa variable esiste nella tabella dei simboli. Questa
opzione è stata aggiunta in PHP 4.2.0.
- EXTR_REFS
Estrae le variabili come riferimenti. Questo in effetti significa che i
valori delle variabili importate referenziano i valori del
parametro var_array. Si può usare questo flag
da solo o combinarlo con gli altri mediante un OR nel parametro
extract_type. Questo flag è stato aggiunto nel PHP
4.3.0.
Se extract_type non è specificato, si
assume che sia EXTR_OVERWRITE.
Si noti che prefix è richiesto solo se
extract_type è EXTR_PREFIX_SAME,
EXTR_PREFIX_ALL, EXTR_PREFIX_INVALID
o EXTR_PREFIX_IF_EXISTS. Se
il risultato non è un nome di variabile valido, non
viene importato nella tabella dei simboli.
extract() restituisce il numero di variabili importate
con successo nella tabella dei simboli.
Avvertimento |
Non utilizzare extract() su dati non convalidati, come
gli input degli utenti ($_GET, ...). Se lo si deve fare, ad esempio per eseguire temporaneamente
vecchio codice basato su
register_globals,
sincerarsi di utilizzare uno dei valori di
extract_type come
EXTR_SKIP e ricordarsi che occorre estrarre
$_SERVER, $_SESSION,
$_COOKIE, $_POST e
$_GET in questo ordine.
|
Un possibile uso di extract() è quello di importare nella tabella dei simboli
variabili contenute in un array associativo restituito da
wddx_deserialize().
Esempio 1. esempio diextract()
<?php
/* Si supponga che $array_variabili sia un array restituito da wddx_deserialize */
$dimensione = "grande"; $array_variabili = array("colore" => "blu", "dimensione" => "media", "forma" => "sfera"); extract($array_variabili, EXTR_PREFIX_SAME, "wddx");
echo "$colore, $dimensione, $forma, $wddx_dimensione\n";
?>
|
L'esempio mostrerà:
blu, grande, sfera, media |
|
La variabile $dimensione non è stata sovrascritta, in quanto è
specificato EXTR_PREFIX_SAME, che ha portato alla
creazione di $wddx_dimensione. Se fosse stato specificato EXTR_SKIP,
$wddx_dimensione non sarebbe stata creata.
EXTR_OVERWRITE avrebbe portato $dimensione ad assumere
il valore "medio", e EXTR_PREFIX_ALL avrebbe fatto creare nuove variabili
chiamate $wddx_colore,
$wddx_dimensione e
$wddx_forma.
Si deve usare un array associativo, un array indicizzato numericamente
non produce risultati a meno di non usare
EXTR_PREFIX_ALL o EXTR_PREFIX_INVALID.
Vedere anche compact().