extract
(PHP 4, PHP 5)
extract — Importovať premenné z poľa do aktuálnej tabuľky symbolov
Popis
Táto funkcia sa používa na importovanie premenných z poľa do aktuálnej tabuľky symbolov. Berie si asociatívne pole var_array a spracováva kľúče ako názvy premenných a hodnoty ako hodnoty premenných. Pre každý pár kľúčov/hodnôt vytvorí premennú v aktuálnej tabuľke symbolov, vzhľadom na parametre extract_type a prefix .
Note: Počínajúc verziou 4.0.5, táto funkcia vracia počet vyňatých premenných.
Note: EXTR_IF_EXISTS a EXTR_PREFIX_IF_EXISTS boli predstavené vo verzii 4.2.0.
Note: EXTR_REFS bol predstavený vo verzii 4.3.0.
extract() kontroluje každý kľúč, či má platný názov premennej. Tiež kontroluje kolízie s existujúcimi premennými v tabuľke symbolov. Spôsob, akým sa neplatné/číselné kľúče a kolízie spracovávajú, je určený extract_type . Môže byť jednou z následujúcich hodnôt:
- EXTR_OVERWRITE
- Ak existuje kolízia, prepísať existujúcu premennú.
- EXTR_SKIP
- Ak existuje kolízia, neprepísať existujúci premennú.
- EXTR_PREFIX_SAME
- Ak existuje kolízia, predradiť názov premennej s prefix om.
- EXTR_PREFIX_ALL
- Predradiť všetky názvy premenných s prefix . Počínajúc PHP 4.0.5, toto zahŕňa aj číselné premenné.
- EXTR_PREFIX_INVALID
- Predradiť iba neplatné/číselné názvy premenných s prefix om. Tento indikátor bol pridaný v PHP 4.0.5.
- EXTR_IF_EXISTS
- Iba prepísať premennú, ak už existuje v aktuálnej tabuľke symbolov, inak neurobiť nič. Toto je užitočné pre difinovanie zoznamu platných premenných a následné vyňatie iba tých premenných, ktoré ste na príklad zadefinovali z $_REQUEST. Tento indikátor bol pridaný v PHP 4.2.0.
- EXTR_PREFIX_IF_EXISTS
- Ak v akutálnej tabuľke symbolov existuje nepredradená verzia rovnakej premennej, vytvoriť len predradené názvy premenných. Tento indikátor bol pridaný v PHP 4.2.0.
- EXTR_REFS
- Vyníma premenné ako odkazy. Efektivita je v tom, že hodnoty importovaných premenných sa stále odkazujú na hodnoty parametra var_array . Tento indikátor môžte použiť ako samostatný alebo kombinovať ho s inýn indikátorom pomocou logického súčtu s extract_type . Tento indikátor bol pridaný v PHP 4.3.0.
Ak extract_type nie je špecifikovaný, usudzuje sa ako EXTR_OVERWRITE.
prefix sa vyžaduje iba ak extract_type je EXTR_PREFIX_SAME, EXTR_PREFIX_ALL, EXTR_PREFIX_INVALID alebo EXTR_PREFIX_IF_EXISTS. Ak predradený výsledok nie je platným názvom premennej, neimportuje sa do tabuľky do symbolov.
extract() vracia počet premenných úspešne importovaných do tabuľky symbolov.
Nepoužívajte extract na nedôverčivé dáta, ako užívateľský vstup ($_GET, ...). Ak tak urobíte, tak napr. ak chcete spustiť starý kód, ktorý sa dočasne spolieha na register_globals, uistite sa, či používate jednu z neprepisujúcich extract_type hodnôt ako EXTR_SKIP, a pozor na to, že teraz by ste mali extract-ovať $_SERVER, $_SESSION, $_COOKIE, $_POST a $_GET v tom poradí.
Možným využitím pre extract() je importovanie premenných nachádzajúcich sa v asociatívnom poli, vrátených pomocou wddx_deserialize(), do tabuľky symbolov.
Example#1 extract() príklad
<?php
/* Predpokladajme, že $var_array je pole vrátené z
wddx_deserialize */
$velkost = "velka";
$prem_pole = array ("farba" => "modra",
"velkost" => "stredna",
"tvar" => "gula");
extract($prem_pole, EXTR_PREFIX_SAME, "wddx");
echo "$farba, $velkost, $tvar, $wddx_velkost\n";
?>
Výsledkom horeuvedného programu bude:
modra, velkost, gula, stredna
$velkost nebola prepísaná, pretože sme neurčili EXTR_PREFIX_SAME, ktorý indikoval, že bol vytvorený v $wddx_velkost. Ak by sa špecifikoval EXTR_SKIP, potom by sa $wddx_velkost dokonca ani nevytvoril. EXTR_OVERWRITE by spôsobil, že by $velkost mala hodnotu "stredna" a z EXTR_PREFIX_ALL by plynulo, že sa nazýva $wddx_farba, $wddx_velkost a $wddx_tvar.
Musíte použiť asociatívne pole, číselne indexované pole by nevyprodukovalo výsledky, ak by ste nepoužili EXTR_PREFIX_ALL alebo EXTR_PREFIX_INVALID.
Tiež pozri compact().