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

时间:2012-08-25 23:17:59

标签: php isset

我希望扩展我的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 },但我不明白?,重复再次获取,或者:''。有人可以帮我解决这个问题,或者至少指出我正确的方向吗?

8 个答案:

答案 0 :(得分:67)

它通常被称为“速记”或Ternary Operator

$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 :)

答案 1 :(得分:6)

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

在给出的示例中,可以使用它从给定的isset返回true

的数组中检索值
isset($_GET['something']) ? $_GET['something'] : ''

相当于

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

当然除非你把它分配给某个东西,否则它没什么用,甚至可能为用户提交的值分配一个默认值。

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

答案 2 :(得分:4)

您遇到了ternary operator。它的目的是基本的if-else语句。以下代码片段做同样的事情。

三元:

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

如果 - 否则:

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

答案 3 :(得分:4)

从PHP 7开始,你可以写得更短:

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

这意味着如果在网址中提供年龄参数,则会将其设置为$age var,或默认为27

查看全部new features of php 7

答案 4 :(得分:2)

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

答案 5 :(得分:1)

?被称为三元(条件)运算符:example

答案 6 :(得分:1)

您正在查看的内容称为Ternary Operator,您可以找到PHP implementation here。它是if else声明。

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

答案 7 :(得分:1)

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

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

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

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

并且您的变量$value设置为空字符串。

  • 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']);