extract Importar variables a la tabla de símbolos actual desde un array &reftitle.description; intextract arrayvar_array intextract_typeEXTR_OVERWRITE stringprefix Importa variables desde un array a la tabla de símbolos actual. Comprueba cada clave para ver si tiene un nombre de variable válido. También comprueba las colisiones con las variables existentes en la tabla de símbolos. &reftitle.parameters; var_array Un array asociativo. Esta función 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 símbolos actual, sujeta a los parámetros extract_type y prefix. Se debe usar un array asociativo; un array indexado numéricamente no producirá resultados a menos que se use EXTR_PREFIX_ALL o EXTR_PREFIX_INVALID. extract_type La manera en que las claves no-válidas/numéricas y las colisiones son tratadas está determinda por el parámetro extract_type. Puede ser uno de los valores siguientes: EXTR_OVERWRITE Si hay una colisión, sobrescribe la variable existente. EXTR_SKIP Si hay una colisión, no sobrescribe la variable existente. EXTR_PREFIX_SAME Si hay una colisión, prefija el nombre de la variable con prefix. EXTR_PREFIX_ALL Prefija todos los nombres de variables con prefix. EXTR_PREFIX_INVALID Sólo prefija los nombres de variables no-válidas/numéricas con prefix. EXTR_IF_EXISTS Sobrescribe la variable sólo si ya existe en la tabla de símbolos actual, de otro modo no hace nada. Esto es útil para definir una lista de variables válidas y después extraer sólo aquellas variables que se definieron fuera de $_REQUEST, por ejemplo. EXTR_PREFIX_IF_EXISTS Crea nombres de variables con prefijo sólo si la versión no prefijada de la misma variable existe en la tabla de símbolos actual. EXTR_REFS Extrae las variables como referencias. Esto significa que los valores de las variables importadas están todavía referenciados por los valores del parámetro var_array. Se puede usar esta bandera por sí misma o combinarla con cualquier otra bandera usando el operador OR en extract_type. Si no se especifica extract_type, se asume que es EXTR_OVERWRITE. prefix Observe que prefix sólo es requerido si extract_type 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 válido, ésta no es importada a la tabla de símbolos actual. Los prefijos son separados de las claves del array mediante un caracter de subrayado. &reftitle.returnvalues; Devuelve el número de variables importadas con éxito a la tabla de símbolos. &reftitle.changelog; &Version; &Description; 4.3.0 Se añadió EXTR_REFS. 4.2.0 Se añadieron EXTR_IF_EXISTS y EXTR_PREFIX_IF_EXISTS. 4.0.5 Esta función ahora devuelve el número de variables extraídas. Se añadió EXTR_PREFIX_INVALID. EXTR_PREFIX_ALL también incluye variables numéricas. &reftitle.examples; Ejemplo de <function>extract</function> Un posible uso de extract es importar a la tabla de símbolos las variables contenidas en un array asociativo devuelto por wddx_deserialize. "azul", "tamaño" => "medio", "forma" => "esfera"); extract($var_array, EXTR_PREFIX_SAME, "wddx"); echo "$color, $tamaño, $forma, $wddx_tamaño\n"; ?> ]]> &example.outputs; El $tamaño no se ha sobrescrito ya que se especificó EXTR_PREFIX_SAME, lo que resulta en la creación de $wddx_tamaño. Si se hubiera especificado EXTR_SKIP, $wddx_tamaño no se habría creado. EXTR_OVERWRITE causaría que $tamaño tuviera el valor "medio", y EXTR_PREFIX_ALL resultaría en variables nuevas llamadas $wddx_color, $wddx_tamaño, y $wddx_forma. &reftitle.notes; 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 código antiguo que cuenta con register_globals temporalmente, asegúrese de usar uno de los valores de extract_type que no sobrescriban, como EXTR_SKIP, y sepa que debería realizar la extracción en el mismo orden que fue definido en variables_order dentro de &php.ini;. Si tiene register_globals activado y usa extract en $_FILES y especifica EXTR_SKIP, puede obtener resutados no deseados. Esto es una práctica no recomendada y sólo está documentada aquí por razones de complementación. El uso de register_globals está obsoleto y las llamadas a extract en información 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 prácticas de código. ]]> Se esperaría ver algo como lo siguiente: 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: 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 numérica tmp_name es interpretada como 0, PHP ve $archivoprueba['tmp_name'] como $archivoprueba[0]. &reftitle.seealso; compact