int extract ( array $var_array [, int $extract_type [, string $prefix ]] )
(PHP 4, PHP 5)

extract_type 과 prefix 인자에 따라 각 키/값 쌍에 대해서 현재 심볼 테이블 안에 변수를 생성합니다. 이 말은 연관배열에 아무런 영향을 주지 않고, 새로운 변수를 생성한다는 점입니다.

<?php
 $arr = array('a'=>'one','b'=>'two','c'=>'three');
 extract($arr);
 echo "$a, $b, $c"; // 결과: one, two, three


 // 이 함수는 새로운 변수를 생성하며,
 // 기존 배열에 아무런 영향을 주지 않습니다.
 print_r($arr);
 /*
 결과:
 Array
 (
    [a] => one
    [b] => two
    [c] => three
 )
 */
 ?> 

위 예제와 같이 $_GET 이나 $_POST 등 신뢰성이 떨어지는 데이터에 extract 함수를 사용하는 것에 주의해야 할 필요가 있음을 메뉴얼에서 권고합니다. GET, POST 등의 다른 변수를 전역으로 가져오고 싶다면 import_request_variables 함수를 사용하길 권장합니다.

유효하지 않은 변수명이나 변수 변형이 필요한 경우 extract_type 에 다음 표의 상수로 정의할 수 있습니다.

상 수 설 명
EXTR_OVERWRITE 생성할 변수가 중복이면, 기존 변수를 덮어 씁니다.
EXTR_SKIP 생성할 변수가 중복이면, 기존 변수를 덮어 쓰지 않습니다.
EXTR_PREFIX_SAME 생성할 변수가 중복이면, prefix 를 변수명 앞에 추가합니다.
EXTR_PREFIX_ALL prefix 를 모든 변수명 앞에 추가합니다.
EXTR_PREFIX_INVALID 유효하지 않은 변수명일 경우 해당 변수명 앞에만 prefix 를 추가합니다.
EXTR_IF_EXISTS 현재 심볼 테이블에 이미 존재하는 변수만 덮어 씁니다.
EXTR_PREFIX_IF_EXISTS 현재 심볼 테이블에 앞 첨가된 버전의 같은 변수가 존재할때만 앞 첨가된 변수명을 생성합니다.
EXTR_REFS 변수를 참조로써 추출합니다. 입력된 변수 값이 var_array 인자의 값을 참조하게 됩니다. 이 플래그는 다른 플래그와 OR 연산자 |로 extract_type 에서 사용할 수 있습니다.

extract_type 인자가 설정되지 않으면, 기본적으로 EXTR_OVERWRITE가 설정되어 있다고 가정합니다.

<?php
 if(isset($_FILES["file"])){
    extract($_FILES);
    extract($file);
    echo $name."<br/>\n";
    echo $tmp_name."<br/>\n";
    echo $size."<br/>\n";
 }


 $size = "large"; 
 $var_array = array("color" => "blue", 
                   "size"  => "medium", 
                   "shape" => "sphere"); 


 // $size 변수가 중복이 되므로 변수를 갖는 
 // size 앞에 $wddx를 추가합니다. 
 // EXTR_PREFIX_SAME 대신에 EXTR_OVERWRITE 를 
 // 설정했다면, $size는 medium을 갖게 됩니다. 
 extract($var_array, EXTR_PREFIX_SAME, "wddx"); 


 echo "$color, $size, $shape, $wddx_size\n"; 
 // 결과: blue, large, sphere, medium


 // 생성되는 변수에 모두 $var_를 붙입니다.
 $z = array('foo', 'bar');
 extract($z, EXTR_PREFIX_ALL, 'var');


 echo "$var_0, $var_1"; // 결과: foo, bar
 ?>

0 댓글