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;
?>
Apache 不会在点击之间跟踪 php 脚本中的变量,您必须将其存储在某个地方,无论是 $_SESSION
还是数据库。
此外,static 关键字并不像您认为的那样起作用。它适用于在单个 运行 脚本 中连续调用函数 ,但不适用于点击之间。
无论如何,你可以使用三元运算符来实现这一点,你会不会碰巧把它放在会话中。我还添加了一个检查以确保该变量实际上是一个可行的计数:
session_start();
$_SESSION['x'] = isset($_SESSION['x']) && is_int($_SESSION['x'])
? $_SESSION['x'] + 1
: 1;
echo $_SESSION['x'];
这是我想要完成的简化版本:
在我的脚本中,我希望在每次按下提交按钮时递增一个静态变量 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;
?>
Apache 不会在点击之间跟踪 php 脚本中的变量,您必须将其存储在某个地方,无论是 $_SESSION
还是数据库。
此外,static 关键字并不像您认为的那样起作用。它适用于在单个 运行 脚本 中连续调用函数 ,但不适用于点击之间。
无论如何,你可以使用三元运算符来实现这一点,你会不会碰巧把它放在会话中。我还添加了一个检查以确保该变量实际上是一个可行的计数:
session_start();
$_SESSION['x'] = isset($_SESSION['x']) && is_int($_SESSION['x'])
? $_SESSION['x'] + 1
: 1;
echo $_SESSION['x'];