You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP如何在一个函数中获取被其他函数更新后的全局变量值

问题原因

  • HTTP协议本身是无状态的,PHP变量的生命周期仅局限在单次请求范围内。你两次点击不同的提交按钮,实际是发起了两次完全独立的请求:第一次点击Continue触发checkId()给全局变量$category赋值,请求结束后所有变量都会被销毁;第二次点击Continue 1是全新的请求,全局变量$category会重新初始化为空,自然读取不到上次请求更新后的值。

解决方法

使用SESSION来持久化存储$category的值,它可以在多个请求之间共享数据,修正后的代码如下:

<?php
// 开启SESSION,必须放在所有输出内容之前
session_start();

// 初始化category值,默认空
if (!isset($_SESSION['category'])) {
    $_SESSION['category'] = '';
}

if (isset($_POST['continue'])) {
  checkId();
}
if (isset($_POST['continue1'])) {
  getDataNo();
}

function checkId()
{
  $_SESSION['category'] = "Test 1";
  echo $_SESSION['category'];
}

function getDataNo()
{
  echo $_SESSION['category'];
}
?>
<!DOCTYPE html>
<html>
<body>
  <h2>Form A</h2>
  <form action="" method="POST">
    Id:<br>
    <input type="text" name="id">
    <br>
    <input type="submit" name="continue" value="Continue">
    <br><br>
    <br>
    <input type="submit" name="continue1" value="Continue 1">
    <br><br>
  </form>
</body>
</html>

如果后续不需要再使用这个值,可以用unset($_SESSION['category'])手动清理,或者使用session_destroy()清空所有SESSION数据。

内容的提问来源于stack exchange,提问作者Serenity Emmanuel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 08:06:01