我希望扩展我的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 }
,但我不明白?,重复再次获取,或者:''。有人可以帮我解决这个问题,或者至少指出我正确的方向吗?
答案 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
答案 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']:'';
<强>更新强> 严格模式可能需要以下内容:
$str_value = strval(@$_GET['something']);
$trimmed_value = trim(@$_GET['something']);
$int_value = intval(@$_GET['somenumber']);