PHP의 extract() 함수는 배열의 키와 값을 현재 심볼 테이블(symbol table)의 변수로 가져오는 기능을 합니다. 즉, 배열의 각 키가 변수명으로, 해당 값이 변수값으로 변환됩니다. 이 함수는 성공적으로 추출된 변수의 개수를 반환합니다.
문법(Syntax)
extract(arr, rules, prefix)
매개변수(Parameters)
arr − 변수로 변환할 대상 배열입니다.
rules − 유효하지 않은(invalid) 변수 이름이나 충돌이 발생했을 때 어떻게 처리할지 지정합니다. 사용 가능한 값은 다음과 같습니다.
EXTR_OVERWRITE − 기본값. 충돌이 발생하면 기존 변수를 덮어씁니다.
EXTR_SKIP − 충돌이 발생하면 기존 변수를 덮어쓰지 않습니다.
EXTR_PREFIX_SAME − 충돌이 발생한 경우에만 변수 이름 앞에 접두사(prefix)를 붙입니다.
EXTR_PREFIX_ALL − 모든 변수 이름에 접두사를 붙입니다.
EXTR_PREFIX_INVALID − 유효하지 않은 이름이나 숫자형 키에만 접두사를 붙입니다.
EXTR_IF_EXISTS − 현재 심볼 테이블에 이미 존재하는 변수만 덮어쓰고, 없으면 아무 작업도 하지 않습니다.
EXTR_PREFIX_IF_EXISTS − 현재 심볼 테이블에 동일한 변수가 존재할 경우에만 접두사를 붙입니다.
EXTR_REFS − 변수를 참조(reference)로 추출합니다. 가져온 변수는 여전히 원본 배열의 값을 참조합니다.
prefix − EXTR_PREFIX_SAME, EXTR_PREFIX_ALL, EXTR_PREFIX_INVALID 또는 EXTR_PREFIX_IF_EXISTS 옵션을 사용할 때만 필요한 접두사입니다.
반환값(Return)
extract() 함수는 성공적으로 추출된 변수의 개수를 정수(int)로 반환합니다.
예제(Example)
다음은 extract() 함수를 활용한 기본 예제입니다.
<?php
$prod = array("AM"=>"AMIT", "TM"=>"Tom");
extract($prod);
echo "\$AM is $AM\n\$TM is $TM";
?>출력 결과(Output)
$AM is AMIT $TM is Tom
주의 사항
extract() 함수는 편리하지만, 사용자 입력값($_GET, $_POST 등)에 직접 적용할 경우 변수 오염(variable injection) 보안 취약점이 발생할 수 있습니다. 따라서 신뢰할 수 있는 데이터에만 사용하고, 가능하면 EXTR_SKIP 같은 안전한 규칙을 함께 지정하는 것이 좋습니다.