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) ani extract($_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.

📘 Naucz się w lekcji →