isset PHP isset($_GET[';something';])$_获取[';某物';


isset PHP isset($_GET['something']) ? $_GET['something'] : ''

我想扩展我的PHP知识,但我发现了一些我不确定它是什么或如何搜索它的东西。我正在查看PHP.net isset代码,我看到了isset($_GET['something']) ? $_GET['something'] : ''

我理解正常的isset操作,例如if(isset($_GET['something']){ If something is exists, then it is set and we will do something },但我不理解?,再次重复get、:或"。有人能帮我解决这个问题吗?或者至少给我指明正确的方向?

它通常被称为"简写"或三元运算符。

$test = isset($_GET['something']) ? $_GET['something'] : '';

if(isset($_GET['something'])) {
    $test = $_GET['something'];
} else {
    $test = '';
}

分解:

$test = ... // assign variable
isset(...) // test
? ... // if test is true, do ... (equivalent to if)
: ... // otherwise... (equivalent to else)

或者。。。

// test --v
if(isset(...)) { // if test is true, do ... (equivalent to ?)
    $test = // assign variable
} else { // otherwise... (equivalent to :)

在PHP7中,您可以将其写得更短:

$age = $_GET['age'] ?? 27;

这意味着,如果$age变量在URL中提供,它将被设置为age参数,或者它将默认为27。

查看PHP7的所有新功能。

它被称为三元运算符,主要用于代替if-else语句。

在您给出的示例中,它可以用于从给定isset返回真实的数组中检索值

isset($_GET['something']) ? $_GET['something'] : ''

相当于

if (isset($_GET['something'])) {
 echo "Your error message!";
} else {
 $test = $_GET['something'];
}

echo$test;

当然,除非您将它分配给某个东西,甚至可能为用户提交的值分配默认值,否则它没有多大用处。

$username = isset($_GET['username']) ? $_GET['username'] : 'anonymous'

您遇到了三元运算符。它的目的是一个基本的if-else语句。以下几段代码也做同样的事情。

三元:

$something = isset($_GET['something']) ? $_GET['something'] : "failed";

如果其他:

if (isset($_GET['something'])) {
    $something = $_GET['something'];
} else {
    $something = "failed";
}

它被称为三元运算符。它是if-else块的简写。有关示例,请参见此处http://www.php.net/manual/en/language.operators.comparison.php#language.operators.comparison.ternary

?称为三元(条件)运算符:示例

您所看到的被称为三元运算符,您可以在这里找到PHP实现。这是一个if else语句。

if (isset($_GET['something']) == true) {
    thing = isset($_GET['something']);
} else {
    thing = "";
}

如果您想要一个空字符串默认值,那么首选的方法是(根据您的需要):

$str_value = strval($_GET['something']);
$trimmed_value = trim($_GET['something']);
$int_value = intval($_GET['somenumber']);

如果url参数something在url中不存在,则$_GET['something']将返回null

strval($_GET['something'])->strval(null)->""

并且您的变量CCD_ 12被设置为空字符串。

  • trim()可能比strval()更受欢迎,这取决于代码(例如Name参数可能想要使用它)
  • intval(),如果只需要数值并且默认值为零。intval(null)->0

需要考虑的案例:

...&something=value1&key2=value2(典型)

...&key2=value2(url$_GET中缺少参数,将为其返回null)

...&something=+++&key2=value(参数为" "

为什么这是首选方法:

  • 它整齐地放在一条线上,清楚地表明了发生了什么
  • 它比$value = isset($_GET['something']) ? $_GET['something'] : '';可读
  • 降低复制/粘贴错误或打字错误的风险:$value=isset($_GET['something'])?$_GET['somthing']:'';
  • 它与较旧和较新的php兼容

更新严格模式可能需要这样的东西:

$str_value = strval(@$_GET['something']);
$trimmed_value = trim(@$_GET['something']);
$int_value = intval(@$_GET['somenumber']);