有人能解释一下这是怎么发生的吗


Can anyone please explain me how is this happening?

我创建了一个类似account_details.php的页面,在其中我计算用户访问该页面的次数。为此,我创建了一个名为count_session.php的文件,其中的代码如下:

<?php
    session_start();
    if(!isset($_SESSION['counter'])){
        $_SESSION['counter'] = 0;
    }else{
        $_SESSION['counter'] = $_SESSION['counter'] + 1;
    }
?>

我在account_details.php页面中包含了上面的文件,我想让用户看看他访问了多少次,它工作得很好,但我不明白它是如何工作的?我在第一个"if"条件(即if(!isset))中使用了echo消息进行了检查,它似乎没有进入该条件,而是进入了其他部分,但为什么它会被0初始化,但当用户访问account_details.php页面时,会弹出消息,如"您已访问此页面1次"。当它还没有在count_session.php文件中的任何位置初始化时,它怎么会计算0+1呢。有人能告诉我吗?

这与会话变量无关,因为它对常规变量的工作方式相同。

如果您编写类似$a = $a + 1的内容,并且$a没有在任何地方声明,PHP会认为它未设置,如果将其转换为int,则会转换为0(与如果将其翻译为bool,则会翻译为false的方式相同,但在本例中这与此无关)。将变量强制转换为int的原因是PHP觉得有必要这样做,因为您正试图对该变量执行数学运算。

总之:PHP检测到您想要将2个值相加,执行类似intval($a)的操作(当然是内部操作)并将1相加。此外,如果您启用了通知,这将向您发出通知。

会话对站点来说是全局的(如主机名),因为它们由存储在cookie中的ID标识,默认情况下,cookie会发送回单个域名下的所有URL。您可以进一步限制,但这是默认行为。