我想扩展我的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']);