与赋值运算符一起使用的逻辑非(!)运算符是否始终为赋值运算符左侧的变量赋值false?

时间:2017-09-13 07:02:19

标签: php variable-assignment logical-operators isset not-operator

我已经关注了代码段,请仔细阅读:

<?php
    // Top of the page, before sending out ANY output to the page.
        $user_is_first_timer = !isset( $_COOKIE["FirstTimer"] );

    // Set the cookie so that the message doesn't show again
        setcookie( "FirstTimer", 1, strtotime( '+1 year' ) );
?>

<H1>hi!</h1><br>


<!-- Put this anywhere on your page. -->
<?php if( $user_is_first_timer ): ?>
    Hello there! you're a first time user!.
<?php endif; ?>

在我的编码经验中,大部分时间我都使用!isset( $_COOKIE["FirstTimer"] )语句看到if等语句。我生命中第一次用赋值算子观察这样的陈述。

在上面的代码中,我只想了解$user_is_first_timer = !isset( $_COOKIE["FirstTimer"] );语句的作用?

逻辑非(!)运算符在此代码行中的作用是什么?

请以清晰可靠的解释清除我的怀疑。

谢谢。

1 个答案:

答案 0 :(得分:2)

以身作则。

Isset(isset:确定变量是否已设置且不为NULL):

$foo = '1';
$bar = '';
$baz = null;

var_dump(isset($foo));
var_dump(isset($bar));
var_dump(isset($baz));
var_dump(isset($bat));

输出:

bool(true)
bool(true)
bool(false)
bool(false)

不是运营商:

var_dump(!true);
var_dump(!false);

输出:

bool(false)
bool(true)

合:

$qux = 'something';
var_dump(!isset($qux));
var_dump(!isset($quux)); // Note quux isn't set.

输出:

bool(false)
bool(true)

因此,在您的示例中,如果未设置cookie值(!isset),则表明您之前没有访问过该网站。

通过分配,您可以拥有$true = !false$true这里将成立,而不是虚假。