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
相关产品推荐
相关产品推荐

