37

我正在寻求扩展我的 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、: 或 ''。有人可以帮我解决这个问题,或者至少为我指明正确的方向吗?

4

8 回答 8

82

它通常被称为“速记”或三元运算符

$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 :)
于 2012-08-25T23:29:55.577 回答
12

在 PHP 7 中你可以写得更短:

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

这意味着如果在 URL 中提供了变量,则该$age变量将被设置为age参数,否则将默认为 27。

查看PHP 7 的所有新特性

于 2016-07-25T12:11:34.107 回答
7

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

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

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

相当于

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

回声$测试;

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

$username = isset($_GET['username']) ? $_GET['username'] : 'anonymous'
于 2012-08-25T23:21:47.227 回答
4

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

三元:

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

如果别的:

if (isset($_GET['something'])) {
    $something = $_GET['something'];
} else {
    $something = "failed";
}
于 2012-08-25T23:23:23.933 回答
2

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

于 2012-08-25T23:21:22.167 回答
1

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

于 2012-08-25T23:21:35.460 回答
1

您正在查看的内容称为三元运算符,您可以在此处找到 PHP 实现。这是一个if else声明。

if (isset($_GET['something']) == true) {
    thing = isset($_GET['something']);
} else {
    thing = "";
}
于 2012-08-25T23:26:33.367 回答
1

如果您想要一个空字符串默认值,那么首选方法是其中之一(取决于您的需要):

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

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

  • trim()根据代码,可能更喜欢strval()使用它(例如,名称参数可能想要使用它)
  • 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']);
于 2017-04-01T04:28:18.440 回答