简单的PHP isset测试

Jas*_*vis 26 php ternary-operator

以下这个似乎没有用,我怎么想,虽然$ _GET ['friendid'] = 55它返回NULL

<?PHP

$_GET['friendid'] = 55;

$friendid = (!isset($_GET['friendid'])) ? $_GET['friendid'] : 'empty';

echo $friendid;
exit;

?>
Run Code Online (Sandbox Code Playgroud)

Gre*_*reg 59

PHP 7发布版本开始,您可以使用null-coalescing运算符(双"?"):

$var = $array["key"] ?? "default-value";
// which is synonymous to:
$var = isset($array["key"]) ? $array["key"] : "default-value";
Run Code Online (Sandbox Code Playgroud)

在PHP 5.3+中,如果您要检查的是" truthy "值,则可以使用"Elvis运算符"(请注意,这不会检查isset).

$var = $value ?: "default-value";
// which is synonymous to:
$var = $value ? $value : "default-value";
Run Code Online (Sandbox Code Playgroud)

  • ?:-)嗯呵呵 (3认同)

Phi*_*ber 47

删除!.你不想否定表达.

$friendid = isset($_GET['friendid']) ? $_GET['friendid'] : 'empty';
Run Code Online (Sandbox Code Playgroud)

  • 这与吸吮无关,但事实上变量可以声明($ var)或初始化($ var ='bla').一个非声明的变量和一个声明并初始化为空字符串的变量是不一样的. (4认同)

Dim*_*nov 11

如果你是懒惰和冒险,你可以使用错误控制运算符@三元运算符的简短形式.

$friendid = @$_GET['friendid']?: 'empty';
Run Code Online (Sandbox Code Playgroud)

  • 请注意,此解决方案速度较慢,可能会干扰(写得不好)自定义错误处理程序等,并且if语句执行速度会更快.但这并不意味着它是邪恶的. (2认同)

ran*_*dom 5

目前您正在与三元运营商合作:

$friendid = (!isset($_GET['friendid'])) ? $_GET['friendid'] : 'empty';
Run Code Online (Sandbox Code Playgroud)

将其分解为一个if-else语句,它看起来像这样:

if(!isset($_GET['friendid']))
   $friendid = $_GET['friendid'];
else
   $friendid = 'empty';
Run Code Online (Sandbox Code Playgroud)

看看if声明中发生了什么:

!isset($_GET['friendid'])
Run Code Online (Sandbox Code Playgroud)

请注意isset功能前面的感叹号(!).这是另一种说法,"与之相反".你在这里做的是检查是否已经设置了值$_GET['friendid'].如果是这样,$friendid应该承担这个价值.

但实际上,它会因为$_GET['friendid']甚至不存在而破裂.你不能把那些不存在的东西的价值拿走.

从头开始,您已设置了一个值$_GET['friendid'],因此第一个if条件现在为false并将其传递给else选项.

在这种情况下,请将$friendid变量的值设置为empty.

你想要的是删除感叹号,然后值$friendid将采取$_GET['friendid']先前设置的值.