PHP中跨页传递函数返回值,通过Session存数组并留存历史值
解决方案:用Session数组存储薪资历史值并打印
咱们先修正现有代码里的小问题,再一步步实现存储历史值的需求:
1. 修正index.php的基础语法错误
你当前的index.php代码里$tsal->$obj->totalsal();是语法错误,正确的做法是先实例化sales.php中的类,再调用totalsal()方法获取值:
session_start(); // 必须放在页面最顶部,不能有任何输出之前调用 // 假设你的sales.php里的类名为Sales,根据实际情况调整 $obj = new Sales(); // 获取当前计算出的总薪资值 $current_tsal = $obj->totalsal();
2. 用Session数组存储历史值(避免覆盖)
要保留历史值,不能直接把单个值赋值给$_SESSION['totalsal'],而是要把它变成一个数组,每次将新值追加到数组末尾:
session_start(); $obj = new Sales(); $current_tsal = $obj->totalsal(); // 初始化Session数组:如果还没创建或者不是数组,就生成空数组 if (!isset($_SESSION['totalsal']) || !is_array($_SESSION['totalsal'])) { $_SESSION['totalsal'] = []; } // 将新的总薪资值追加到数组末尾,这样旧值不会被覆盖 $_SESSION['totalsal'][] = $current_tsal;
3. 打印新值与历史值
现在$_SESSION['totalsal']是一个包含所有历史记录的数组,我们可以轻松取出新值和历史值:
// 打印最新的薪资值(数组最后一个元素) echo "最新总薪资:" . end($_SESSION['totalsal']) . "<br>"; // 打印所有历史记录(包括最新值) echo "<h4>所有薪资历史记录:</h4>"; foreach ($_SESSION['totalsal'] as $key => $salary) { // key从0开始,所以加1显示序号 echo "第" . ($key + 1) . "次记录:" . $salary . "<br>"; } // 如果你只想打印除最新值外的历史记录 if (count($_SESSION['totalsal']) > 1) { echo "<h4>历史记录(不含最新值):</h4>"; // 取出数组中除最后一个元素外的所有内容 $history_records = array_slice($_SESSION['totalsal'], 0, -1); foreach ($history_records as $key => $salary) { echo "第" . ($key + 1) . "次记录:" . $salary . "<br>"; } }
注意事项
- 确保
session_start();在页面的最顶部调用,不能有任何HTML输出或者echo语句在它之前,否则会报错。 - 替换代码中的
Sales为你sales.php里实际的类名,比如如果你的类是class sales,就写成new sales();。
内容的提问来源于stack exchange,提问作者Megha Dholakia
相关产品推荐
相关产品推荐

