Sunteți pe pagina 1din 4

a tabla de smbolos actual.

EXTR_REFS
Extrae las variables como referencias. Esto significa que los valores de las
variables importadas estn todava referenciados por los valores del parPHP 4, PHP
5, PHP 7)
extract Importar variables a la tabla de smbolos actual desde un array

Descripcin

int extract ( array &$array [, int $flags = EXTR_OVERWRITE [, string $prefix = NULL
]] )
Importa variables desde un array a la tabla de smbolos actual.

Comprueba cada clave para ver si tiene un nombre de variable vlido. Tambin
comprueba las colisiones con las variables existentes en la tabla de smbolos.

Parmetros

array
Un array asociativo. Esta funcin trata a las claves como nombres de variables y a
los valores como valores de variables. Por cada par clave/valor crear una variable
en la tabla de smbolos actual, sujeta a los parmetros flags y prefix.

Se debe usar un array asociativo; un array indexado numricamente no producir


resultados a menos que se use EXTR_PREFIX_ALL o EXTR_PREFIX_INVALID.

flags
La manera en que las claves no-vlidas/numricas y las colisiones son tratadas est
determinda por el parmetro flags. Puede ser uno de los valores siguientes:

EXTR_OVERWRITE
Si hay una colisin, sobrescribe la variable existente.
EXTR_SKIP
Si hay una colisin, no sobrescribe la variable existente.
EXTR_PREFIX_SAME
Si hay una colisin, prefija el nombre de la variable con prefix.
EXTR_PREFIX_ALL
Prefija todos los nombres de variables con prefix.
EXTR_PREFIX_INVALID
Slo prefija los nombres de variables no-vlidas/numricas con prefix.
EXTR_IF_EXISTS
Sobrescribe la variable slo si ya existe en la tabla de smbolos actual, de otro
modo no hace nada. Esto es til para definir una lista de variables vlidas y
despus extraer slo aquellas variables que se definieron fuera de $_REQUEST, por
ejemplo.
EXTR_PREFIX_IF_EXISTS
Crea nombres de variables con prefijo slo si la versin no prefijametro array. Se
puede usar esta bandera por s misma o combinarla con cualquier otra bandera usando
el operador OR en flags.
Si no se especifica flags, se asume que es EXTR_OVERWRITE.

prefix
Observe que prefix slo es requerido si flags es EXTR_PREFIX_SAME, EXTR_PREFIX_ALL,
EXTR_PREFIX_INVALID o EXTR_PREFIX_IF_EXISTS. Si el resultado prefijado no es un
nombre de variable vlido, sta no es importada a la tabla de smbolos actual. Los
prefijos son separados de las claves del array mediante un caracter de subrayado.

Valores devueltos
Devuelve el nmero de variables importadas con xito a la tabla de smbolos.

Ejemplos

Ejemplo #1 Ejemplo de extract()

Un posible uso de extract() es importar a la tabla de smbolos las variables


contenidas en un array asociativo devuelto por wddx_deserialize().

<?php

/* Se supone que $var_array es un array devuelto desde


wddx_deserialize */

$tamao = "grande";
$var_array = array("color" => "azul",
"tamao" => "medio",
"forma" => "esfera");
extract($var_array, EXTR_PREFIX_SAME, "wddx");

echo "$color, $tamao, $forma, $wddx_tamao\n";

?>
El resultado del ejemplo sera:

azul, grande, esfera, medio


El $tamao no se ha sobrescrito ya que se especific EXTR_PREFIX_SAME, lo que
resulta en la creacin de $wddx_tamao. Si se hubiera especificado EXTR_SKIP,
$wddx_tamao no se habra creado. EXTR_OVERWRITE causara que $tamao tuviera el
valor "medio", y EXTR_PREFIX_ALL resultara en variables nuevas llamadas
$wddx_color, $wddx_tamao, y $wddx_forma.

Notas

Advertencia
No use extract() en datos que no son de confianza, como las entradas de usuario
(esto es, $_GET, $_FILES, etc.). Si lo hace, por ejemplo si quiere ejecutar
temporalmente cdigo antiguo que dependa de register_globals temporalmente,
asegrese de usar uno de los valores de flags que no sobrescriban, como EXTR_SKIP,
y sepa que debera realizar la extraccin en el mismo orden que fue definido en
variables_order dentro de php.ini.
Nota:
Si an tiene register_globals y est activado, si utiliza extract() en $_FILES y
especifica EXTR_SKIP, puede obtener resutados no deseados.
Advertencia
Esto es una prctica no recomendada y slo est documentada aqu por razones de
complementacin. El uso de register_globals est obsoleto y las llamadas a
extract() en informacin que no es de confianza tal como $_FILES es, como se
observ arriba, un riesgo potencial de seguridad. Si se encuentra con esto,
significa que est usando al menos dos malas prcticas de cdigo.
<?php

/* Se supone que $archivoprueba es el nombre de una entrada de subida de archivo


y que register_globals est activado. */

var_dump($archivoprueba);
extract($_FILES, EXTR_SKIP);
var_dump($archivoprueba);
var_dump($archivoprueba['tmp_name']);
?>
Se esperara ver algo como lo siguiente:
string(14) "/tmp/phpgCCPX8"
array(5) {
["name"]=>
string(10) "somefile.txt"
["type"]=>
string(24) "application/octet-stream"
["tmp_name"]=>
string(14) "/tmp/phpgCCPX8"
["error"]=>
int(0)
["size"]=>
int(4208)
}
string(14) "/tmp/phpgCCPX8"
Sin embargo, en su lugar se ve algo como esto:
string(14) "/tmp/phpgCCPX8"
string(14) "/tmp/phpgCCPX8"
string(1) "/"
Esto es a causa del hecho de que, ya que register_globals est activado,
$archivoprueba ya existe en el mbito global cuando se llam a extract(). Y ya que
EXTR_SKIP est especificado, $archivoprueba no es sobrescrito con el contenido del
array $_FILES por lo que $archivoprueba permanece como cadena. Ya que a las cadenas
se puede acceder usando la sintaxis de array y la cadena no numrica tmp_name es
interpretada como 0, PHP ve $archivoprueba['tmp_name'] como $archivoprueba[0].
Ver tambin

compact() - Crear un array que contiene variables y sus valores


list() - Asignar variables como si fueran un array
add a note add a note
User Contributed Notes 27 notes

up
down
16 CertaiN 3 years ago
[New Version]

Example Usage:
<?php
$_GET['A']['a'] = ' CORRECT(including some spaces) ';
$_GET['A']['b'] = ' CORRECT(including some spaces) ';
$_GET['A']['c'] = "Invalid UTF-8 sequence: \xe3\xe3\xe3";
$_GET['A']['d']['invalid_structure'] = 'INVALID';

$_GET['B']['a'] = ' CORRECT(including some spaces) ';


$_GET['B']['b'] = "Invalid UTF-8 sequence: \xe3\xe3\xe3";
$_GET['B']['c']['invalid_structure'] = 'INVALID';
$_GET['B']["Invalid UTF-8 sequence: \xe3\xe3\xe3"] = 'INVALID';

$_GET['C']['a'] = ' CORRECT(including some spaces) ';


$_GET['C']['b'] = "Invalid UTF-8 sequence: \xe3\xe3\xe3";
$_GET['C']['c']['invalid_structure'] = 'INVALID';
$_GET['C']["Invalid UTF-8 sequence: \xe3\xe3\xe3"] = 'INVALID';

$_GET['unneeded_item'] = 'UNNEEDED';

var_dump(filter_struct_utf8(INPUT_GET, array(
'A' => array(
'a' => '',
'b' => FILTER_STRUCT_TRIM,
'c' => '',
'd' => '',
),
'B' => FILTER_STRUCT_FORCE_ARRAY,
'C' => FILTER_STRUCT_FORCE_ARRAY | FILTER_STRUCT_TRIM,
)));
?>

S-ar putea să vă placă și