Hàm extract() trong PHP được sử dụng để nhập các biến từ một mảng vào trong bảng biểu tượng hiện tại (current symbol table). Nó nhận một mảng array và coi các key như là các tên biến và các value là các giá trị biến. Với mỗi cặp key/value nó sẽ tạo một biến trong bảng ký tự hiện tại, theo các tham số extract_type và prefix.
Hàm này được sử dụng trên PHP4, PHP5 và PHP7.
Cú pháp hàm extract() trong PHP như sau:
extract ( array &$array [, int $flags = EXTR_OVERWRITE [, string $prefix = NULL ]] ) : int
EXTR_OVERWRITE
ghi đè các giá trịEXTR_SKIP
không ghi đè các giá trịEXTR_PREFIX_SAME
nếu tồn tại, thì sẽ tạo biến dựa trên tiền tố $prefixEXTR_PREFIX_ALL
thêm tiền tố $prefix vào toàn bộEXTR_PREFIX_INVALID
chỉ tiền tố không hợp lệ/ tên biến số với $prefixEXTR_IF_EXISTS
chỉ ghi đè nếu biến đó đã tồn tạiEXTR_PREFIX_IF_EXISTS
chỉ tạo biến có tiền tố $prefix nếu có nhiều biến cùng tên trong mảngHàm extract() sẽ trả về số lượng biến theo KEY trong mảng va $prefix đươc nhập thành công.
<?php $size = "large"; $var_array = array("color" => "blue", "size" => "medium", "shape" => "sphere"); extract($var_array, EXTR_PREFIX_SAME, "wddx"); echo "$color, $size, $shape, $wddx_size\n"; ?>
blue, large, sphere, medium
Tùy vào $flag mà bạn chọn thì hàm extract sẽ có các tùy chọn khác nhau, nếu trong trường hợp bạn không truyền tham số $flag thì mặc định hàm sẽ được xử lý theo $flag EXTR_OVERWRITE, trong ví dụ trên bạn có thể thấy, hàm extract được truyền vào tham số là $EXTR_PREFIX_SAME – khi có biến đã tồn tại thì tạo thêm một biến với tiền tố $frefix đã truyền vào
Khuyến cáo: Không nên sử dụng hàm extract() trong các trường hợp xử lý dữ liệu trực tiếp với các biến hệ thống như $_GET, hoặc $_SET, cảnh báo này cũng áp dụng với $_FILES.
<?php var_dump($testfile); extract($_FILES, EXTR_SKIP); var_dump($testfile); var_dump($testfile['tmp_name']); ?>
Như mình đã khuyến cáo ở trên, trong trường hợp này bạn có thể mong muốn một kết quả như sau:
string(14) "/tmp/phpgCCPX8" array(5) { ["name"]=> string(10) "somefile.txt" ["type"]=> string(24) "application/octet-stream" ["tmp_name"]=> string(14) "/tmp/phpgCCPX8" ["error"]=> int(0) ["size"]=> int(4208) } string(14) "/tmp/phpgCCPX8"
Tuy nhiên kết quả thực tế sẽ là
string(14) "/tmp/phpgCCPX8" string(14) "/tmp/phpgCCPX8" string(1) "/"
Như vậy việc thao tác với các biến hệ thống hoặc dữ liệu có độ rủi do cao, bạn không nên sử dụng extract().
<?php class Foo { public function __construct ($array) { extract($array, EXTR_REFS); foreach ($array as $key => $value) { $this->$key = $$key; } } } $array = array( 'valueOne' => 'Test Value 1', 'valueTwo' => 'Test Value 2', 'valueThree' => 'Test Value 3' ); $foo = new Foo($array); // Works echo $foo->valueOne; // Test Value 1 echo $foo->valueTwo; // Test Value 2 ?>
Trong ví dụ trên các bạn có thể thấy ứng dụng của hàm extract() trong việc khởi tạo một đối tượng có nhiều tham số dễ dàng như thế nào.
Hi vọng với bài viết này, bạn đã hiểu rõ cách sử dụng hàm extract() trong PHP. Nếu thấy bài viết hay và ý nghĩa, hãy like và chia sẻ với bạn bè để mọi người cùng nhau học tập nhé.
Cảm ơn bạn đã ghé thăm codetutam.com
Bình luận: