PHP 静态变量在页面加载后重新加载

PHP Static variable reloads after Page Load

这是我想要完成的简化版本:

在我的脚本中,我希望在每次按下提交按钮时递增一个静态变量 x。

<?php
function IncX(){
   static $x = 0;
    $x++;
    echo $x;
}
?>

<body>
<form>
<input type="submit" name="submit" class="next btn btn-primary" value="Submit" />
</form>
</body>

但是它 在每次提交后重新加载页面时初始化为 x=0

每次加载页面时都会重新加载变量,因此它总是相同的。

解决方案是将它存储在会话中,然后在那里递增。如果变量尚不存在,则包含创建变量的条件。

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


?>

A​​pache 不会在点击之间跟踪 php 脚本中的变量,您必须将其存储在某个地方,无论是 $_SESSION 还是数据库。

此外,static 关键字并不像您认为的那样起作用。它适用于在单个 运行 脚本 中连续调用函数 ,但不适用于点击之间。

无论如何,你可以使用三元运算符来实现这一点,你会不会碰巧把它放在会话中。我还添加了一个检查以确保该变量实际上是一个可行的计数:

session_start();
$_SESSION['x'] = isset($_SESSION['x']) && is_int($_SESSION['x'])
    ? $_SESSION['x'] + 1
    : 1;
echo $_SESSION['x'];