//php可变变量
$arr = ['first'=>'value1','second'=>'value2','third'=>'value3'];
foreach ($arr as $key=>$value){
$$key = $value;
}
print_r($arr);//打印结果:['first'=>'value1','second'=>'value2','third'=>'value3'];//原数组不变
print_r($first);//打印结果:value1;
print_r($second);//打印结果:value2;
print_r($third);//打印结果:value3;
通过foreach循环后,设置了三个变量,分别是:$first,$second,$third
//实例说明,例如工作中曾经遇到的接口请求页(公共包含文件publc.php)代码大概如下:
//该函数作用:1、检测该传递的参数是否传递了,2、对传递过来的参数进行赋值操作
function checkParam($param,$res=[]){
foreach (@$res as $k => $v) {
$$k = @$v;
}
foreach ($param as $k => $v) {
if (!isset($$v)) {
return "-1_{$v}";
}
}
return true;
}
//接收post提交过来的变量(注意:这里没有用$_POST来接收)
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$postText = trim(file_get_contents('php://input'));
}
$res = json_decode($postText, true);
//对所接收的参数进行处理(将每一个传递过的参数进行声明一个对应的同名的变量:如,传递过来的有参数有page,language,cate三个参数的话,经过下面的操作后,将声明三个变量($res还是原来的$res,这个数组是不变的,只不过多了三个变量):$page,$language,$cate)
foreach (@$res as $k => $v) {
//用‘php://input’这种方式接收到传递过来的参数后,对传递过来的参数进行赋值操作(如Rank.php中的$page,$cate这种,提前没有声明,而且是直接使用的原因是这里已经隐式的声明过了。初看Rank.php代码时遇到的疑惑这里被解释了。。。)
$$k = @$v;
}
//下面是Rank.php文件,这里直接使用了经过上面隐式声明的几个变量
//$page和$cate是经过上面操作后隐式声明的
if(empty($page)){
$page = 1;
}
if(!in_array($cate,['sell','hot','new'])){
$cate = 'sell';
}
//同样,另外一个接口文件:detail.php页面也用到了 public.php文件中的公共接收参数部分,该文件代码如下:
include_once 'public.php';
$flag = checkParam(['video_id','token'],$res);
if ($flag !== true) {
$response = array('error'=>'-1','msg'=>'缺少必要参数');
echo json_encode($response);die;
}
//分析:调用了checkParam()方法,先进行第二个参数$res的检测工作:跳到public.php文件中的参数接收部分,在执行public.php中的checkParam()函数,进入该函数后,执行第一步操作:对接收到的所有是参数进行赋值操作(给接收到的参数赋一个同名的变量,该变量也即是需要api接口需要传递的参数),进入到第二步,检查必填参数是不是都填了(原理:看看必填擦名称是不是经过第一步操作后都被赋值了,如果被赋值了,说明传递了该参数过来,否则就没有传递对应的参数进来(感觉这一步判断写的很妙!!!))