PHP extract() 函数从数组中把变量导入到当前的符号表中。对于数组中的每个元素,键名用于变量名,键值用于变量值。
下面是PHP的超级全局变量,可以了解一个特性,全是数组。
_SERVER, 服务器环境变量数组
_POST, 通过POST方法传递给脚本的变量数组
_REQUEST,所有用户输入的变量数组,包括
_POST和
_FILES,与文件上传相关得变量数组
_SESSION,会话变量数组
可以通过本地测试一下 phpstudy
写入 1.php
<?php
var_dump($_GET);
?>
访问http://127.0.0.1/test2.php?key=123&b=85f 得到array(2) { [“key”]=> string(3) “123” [“b”]=> string(3) “85f” }
extract(array,extract_rules,prefix)
<?php
$a = 'Original';
$my_array = array("a" => "Cat","b" => "Dog", "c" => "Horse");
extract($my_array);
echo "\$a = $a; \$b = $b; \$c = $c";
?>
输出:
b = Dog;
$c = Horse
<?php
$a = 'Original';
$my_array = array("a" => "Cat","b" => "Dog", "c" => "Horse");
extract($my_array, EXTR_PREFIX_SAME, 'dup');
echo "\$a = $a; \$b = $b; \$c = $c; \$dup_a = $dup_a;";
?>
输出:
b = Dog;
dup_a = Cat;
前缀和数组键名之间会自动加上一个下划线。
extract(),它的主要作用是将数组展开,键名作为变量名,元素值为变量值
可以说为数组的操作提供了另外一个方便的工具,比方说,可以很方便的提取
_GET的元素,对表单提交上来的内容不能不用一一赋值,直接使用下面代码:
form.html
<form action="action.php" method="post">
<input type="text" name="username">
<input type="password" name="password">
<input type="submit">
在action.php中只要使用extract()函数将$_POST全局数据解开:
action.php
<?php
extract($_POST);
//相当于$username = $_POST['username'];
//$password = $_POST['password'];
?>
<form action = "1.php" method="post">
<input type="text" name="ai">
<input type="submit" value="tijiao">
</form>
1.php
<?php
@extract($_POST,EXTR_SKIP);
echo $ai
?>
当输入 jkl 输出 为 jkl 可以看到 我们没有用
a
把数组中的键名直接注册为了变量,就像把
ai
安全的做法是确定register_globals=OFF后,在调用extract()时使用EXTR_SKIP保证已有变量不会被覆盖。
<?php
$auth='0';
extract($_GET);
if($auth==1){
echo "private!";
}
else{
echo "public!";
}
?>
当构造http://www.a.com/x.php?auth=1时,可打印出private!