【问题标题】:PHP Static variable reloads after Page Load页面加载后PHP静态变量重新加载
【发布时间】:2015-12-30 13:14:19
【问题描述】:

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

在我的脚本中,我希望每次按下提交按钮时都会增加一个静态变量 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

【问题讨论】:

  • 那是因为每次点击提交按钮时都会加载页面...我想你误解了静态变量的作用;他们只保留一个请求的价值。点击按钮发送多个请求。
  • 如上面评论中所说,这不是静态变量的工作方式,请查看$_SESSION
  • 如果那么奥尔森怎么办?
  • 取决于你想做什么。使用 cookie 将是一种节省价值的轻量级方式。会话有点繁重,但它们也是一个很好的解决方案。
  • 如果页面至少重新加载 30 次.. 哪个会更好?

标签: php forms static reload


【解决方案1】:

每次页面加载时都会重新加载变量,所以它总是一样的。

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

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

【讨论】:

  • 即使现在变量也不会增加.. GeoFFAtkins
  • 我假设在函数中处理增量是有原因的,并且您正在页面上的某处调用该函数?
  • 我已更新答案以删除该功能,这应该可以解决问题。确保在发送任何标头之前调用 session_start()
【解决方案2】:
<?php
session_start();
$x = 0;
    if (isset($_SESSION['x'])) {
      $x = $_SESSION['x'];
      $x++;
    } else {
      $_SESSION['x'] = $x;
    }
    // /$x++;
    echo $x;
    $_SESSION['x'] = $x;


?>

【讨论】:

  • 这与其他分析器完全相同。你还添加了什么?
  • @FélixGagnon-Grenier 当我添加答案时。帖子未编辑,答案错误,到编辑时您可以看到。
【解决方案3】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-03
    • 1970-01-01
    • 2020-09-05
    • 2014-02-12
    • 2016-05-12
    • 1970-01-01
    • 2011-11-07
    • 2015-11-17
    相关资源
    最近更新 更多