简单的PHP isset测试

时间:2009-08-08 13:19:17

标签: php ternary-operator

下面的内容似乎没有用到我的预期,但事件虽然$ _GET ['friendid'] = 55它返回NULL

<?PHP

$_GET['friendid'] = 55;

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

echo $friendid;
exit;

?>

9 个答案:

答案 0 :(得分:57)

PHP 7's release开始,你可以使用null-coalescing运算符(双“?”):

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

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

$var = $value ?: "default-value";
// which is synonymous to:
$var = $value ? $value : "default-value";

答案 1 :(得分:46)

删除!。你不想否定这个表达。

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

答案 2 :(得分:11)

如果您懒惰且有风险,可以使用error control operator @ternary operator的缩写形式。

$friendid = @$_GET['friendid']?: 'empty';

答案 3 :(得分:5)

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

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

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

if(!isset($_GET['friendid']))
   $friendid = $_GET['friendid'];
else
   $friendid = 'empty';

查看if声明中发生的事情:

!isset($_GET['friendid'])

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

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

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

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

你想要的是删除感叹号,然后$friendid的值将采用$_GET['friendid']的值(如果之前已经设置过的话)。

答案 4 :(得分:2)

此问题的最佳解决方案,即如果您还需要“检查空字符串”,则为empty()

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

empty()不仅检查变量是否已设置,而且如果输入任何可被视为“空”的内容,则返回false,例如空字符串,空数组,整数0,布尔值false, ......

答案 5 :(得分:1)

从您对Philippe的回复中我想您需要了解emptyisset之间的差异。

总而言之,如果变量存在,isset()将返回布尔值TRUE。因此,如果你要做

$fid = $_GET['friendid'] = "";
$exists = isset($fid);
$exists存在时,

$_GET['friendid']将为TRUE。如果这不是你想要的,我建议你调查一下。 Empty将在空字符串(“”)上返回TRUE,这似乎是您所期望的。如果您确实使用空,参考我链接到的文档,还有其他情况,空的将返回true,您可能没有预期,这些情况在上面的链接中明确记录。

答案 6 :(得分:0)

如果friendid 设置,则friendid = friendid,否则friendid =空

答案 7 :(得分:0)

好吧,我可能一直有类似的问题不熟悉! jasondavis的情况。

有点混乱,却发现没有!如... isset($ avar)与!isset($ avar)相比可以产生相当大的差异。

所以随着!在适当的位置,更像是

中的YES
    since $_GET['friendid'] = 55; has been initialized...
                                tell me 'no' - the opposite - that it hasn't and set it to empty.
              $friendid = (!isset($_GET['friendid'])) ? $_GET['friendid'] : 'empty';

    where not having the ! tells me yes it has something in it, leave it be.

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

如果A $ =&#34;&#34;然后....工作吧。 (或如果$ A =&#34;&#34;对于那些PHP)。

我发现使用字符串和变量作为字符串有时非常令人生畏。即使是混乱,我也能理解为什么......只是让我有点难以理解。

答案 8 :(得分:0)

我在if条件下使用Null coalescing operator运算符

if($myArr['user'] ?? false){

相当于

if(isset($myArr['user']) && $myArr['user']){