isset()的快捷方式和赋值

时间:2013-09-26 09:02:28

标签: php

是否有一种快捷方法可以将$_GET['values']分配给变量?

我目前和其他人一样:

if(isset($_GET['type'],$_GET['case'])
   $type = $_GET['type'];
   $case = $_GET['case'];

是否有更简洁的方法来执行此操作,而不是单独执行以下操作。

 $type = $_GET['type'];
 $case = $_GET['case'];

8 个答案:

答案 0 :(得分:4)

我能想到的唯一一行代码,以确保您仍然进行必要的检查,

$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");
?>

script2.php

<?php
  foreach($_GET as $key=>$value) {
    $$key = $value;
  }
  // user added &tableToDelete=users
  // DROP TABLE $table
  // will gloriously delete users
?>

相反,通过使用我发布的原始代码写几行,您可以在php脚本的开头获取所需的变量,并清楚地使用它们。

答案 1 :(得分:4)

http://docs.php.net/extract

我认为你正在寻找extract功能。

extract($_GET); //now, all of the functions are in current symbol table

答案 2 :(得分:4)

好吧,使用数组映射,您可以获得case不仅一次,而且可以同时获取,同时您也可以同时检查isset()empty()

假设您有以下网址: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']

答案 3 :(得分:1)

尝试

foreach($_GET as $key=>$value) {
     $get_arr[$key] = $_GET[$key];
}
print_r($get_arr);

答案 4 :(得分:0)

我会这样做,这样你就可以确保它只会返回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']);

答案 5 :(得分:0)

$ _ GET是表格,因此您可以轻松使用foreach函数

例如

foreach ($_GET as $key => $value) {
... = $value;
}

如果您想使用$ key names创建变量,请使用变量变量 PHP Manual Variable Variables

答案 6 :(得分:0)

您可以通过extract()

执行此操作

extract($_GET, EXTR_PREFIX_ALL, 'g');

这样

$_GET['val']变为$g_val

请注意第三个参数:g它会将g_添加到键中。

答案 7 :(得分:0)

这个(未经测试的)课程可以帮助你:

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
}