是否有分配$_GET['values']
给变量的快捷方法?
我目前和其他人一样:
if(isset($_GET['type'],$_GET['case'])
$type = $_GET['type'];
$case = $_GET['case'];
有没有更清洁的方法来做到这一点,而不是像下面那样单独做。
$type = $_GET['type'];
$case = $_GET['case'];
是否有分配$_GET['values']
给变量的快捷方法?
我目前和其他人一样:
if(isset($_GET['type'],$_GET['case'])
$type = $_GET['type'];
$case = $_GET['case'];
有没有更清洁的方法来做到这一点,而不是像下面那样单独做。
$type = $_GET['type'];
$case = $_GET['case'];
我能想到的唯一一行代码,以确保您仍然进行必要的检查,是
$type = (isset($_GET['type'])) ? $_GET['type'] : 'a default value or false';
阅读评论,我知道您可能想要这样做:
foreach($_GET as $key=>$value) {
$$key = $value;
}
不过,我建议始终初始化您只需要的变量。上面的代码将导致获取未知变量,这实际上可能为用户提供了一种操作脚本的方法。
例子:
index.php?ExpectedVar=1&UserDefinedVar=2
将在您的代码中生成以下变量:
$ExpectedVar // 1 <- you wanted this one
$UserDefinedVar // 2 <- but what about this?
如果你有这个脚本被其他脚本调用怎么办?
然后,即使您在文件顶部有此代码,您也可能会从用户定义的 $_GET 中覆盖一些变量!
灾难案例场景:
script1.php
<?php
$tableToDelete = "old_products";
include("script2.php");
?>
脚本2.php
<?php
foreach($_GET as $key=>$value) {
$$key = $value;
}
// user added &tableToDelete=users
// DROP TABLE $table
// will gloriously delete users
?>
相反,通过使用我发布的原始代码编写几行代码,您可以在 php 脚本的开头获取所需的变量并清楚地使用它们。
好吧,使用数组映射,您不仅可以获取case
一次,还可以一次获取全部,您还可以同时检查isset()
和empty()
。
假设你有这个 URL:read.php?id=1&name=foo&job=student&country=Brazil
您的问题是获取$_GET
类型,您可能需要检查它是否empty/isset
正确?
好吧,首先你创建一个函数来遍历它。
function checkGet($val){
return (isset($val) && !empty($val)) ? $val : null;
}
然后,您使用回调该函数array_map()
$check = array_map('checkGet', $_GET);
就是这样!
如果你var_dump($check);
现在做,你会得到所有的类型和值:
array (size=4)
'id' => string '1' (length=1)
'name' => string 'foo' (length=3)
'job' => string 'student' (length=7)
'country' => string 'Brazil' (length=6)
意思是,在此之后,不做:
if(isset($_GET['something']) && !empty($_GET['something']))
$var = $_GET['something'];
echo $var;
做就是了:
echo $check['something']
我认为您正在寻找extract
功能。
extract($_GET); //now, all of the functions are in current symbol table
试试喜欢
foreach($_GET as $key=>$value) {
$get_arr[$key] = $_GET[$key];
}
print_r($get_arr);
你可以通过extract()
extract($_GET, EXTR_PREFIX_ALL, 'g');
以便
$_GET['val']
变成$g_val
注意第三个参数:g
它g_
在键之前。
我会这样做,这样你就可以确保它只会返回 TRUE 或 FALSE
if (!isset($_GET['type']) || empty($_GET['type'])) {
// Display error
} else {
$type = $_GET['type'];
$case = $_GET['case'];
}
或者你也可以这样做
$type = (isset($_GET['type'])===false)?'':trim($_GET['type']);
$case = (isset($_GET['case'])===false)?'':trim($_GET['case']);
$_GET 是表,因此您可以轻松使用 foreach 函数
例如
foreach ($_GET as $key => $value) {
... = $value;
}
如果您想使用 $key 名称创建变量,请使用变量 variables PHP Manual Variable Variables
这个(未经测试的)类应该可以帮助你:
class MyGet {
public static $myValues = array();
public static function setMyValues($keywords, $where) {
MyGet::$myValues = array();
for ($index = 0; $index < count($keywords); $index++) {
if ((!(isset($where[$keywords[$index]]))) || (empty($where[$keywords[$index]]))) {
MyGet::$myValues = array();
return false;
}
MyGet::$myValues[$keywords[$index]] = $where[$keywords[$index]];
}
}
}
你可以像这样使用它:
if (MyGet::setMyValues(array(0 => "type", 1 => "case"), $_GET)) {
//the values are initialized
} else {
//the values are not initialized
}