extract
konstrukcja językowa
Importuje klucze tablicy jako zmienne do bieżącego zasięgu. Konstrukcja językowa — nigdy nie używaj z danymi od użytkownika.
extract(array &$array, int $flags = EXTR_OVERWRITE, string $prefix = ""): int
⚠️ Ostrzeżenie bezpieczeństwa: Nigdy nie wywołuj
extract($_GET),extract($_POST)aniextract($_REQUEST). Atakujący może wtedy nadpisać dowolną zmienną w bieżącym zasięgu — włącznie z tymi, które kontrolują logikę autoryzacji, ścieżki plików czy flagi bezpieczeństwa. To poważna luka umożliwiająca przejęcie aplikacji.Zamiast extract z żądaniem HTTP zawsze pisz jawne przypisania:
$imie = $_POST['imie'] ?? ''; $wiek = (int) ($_POST['wiek'] ?? 0);
extract bierze tablicę asocjacyjną i dla każdej pary klucz→wartość tworzy zmienną $klucz = wartość w bieżącym zasięgu. Zwraca liczbę pomyślnie zaimportowanych zmiennych.
<?php
declare(strict_types=1);
// Bezpieczne użycie: tablica pochodzi z twojego kodu, nie od użytkownika
$dane = [
'imie' => 'Anna',
'wiek' => 30,
'miasto' => 'Kraków',
];
$n = extract($dane);
echo $n; // wynik: 3
echo $imie; // wynik: Anna
echo $wiek; // wynik: 30
Parametr $flags steruje zachowaniem przy kolizji nazw:
| Flaga | Działanie |
|---|---|
| EXTR_OVERWRITE (domyślnie) | Nadpisuje istniejące zmienne |
| EXTR_SKIP | Pomija klucze, których zmienne już istnieją |
| EXTR_PREFIX_ALL | Poprzedza wszystkie nazwy prefiksem ($prefix) |
W praktyce extract jest rzadko potrzebna i zaciemnia kod — trudno stwierdzić, skąd pochodzi dana zmienna. Preferuj jawne przypisania lub destrukturyzację tablicy.