PHP中如何将函数返回值存入Session数组?当前写法是否正确?
你的PHP Session存储代码是否正确?
咱们来拆解下这段代码,看看它的正确性,同时聊聊几个关键的注意点:
核心逻辑的语法正确性
从语法层面来说,这段代码是可以运行的:
- 你把
$obj->totalsal()的返回值追加到数组$tsal中,再将这个数组赋值给$_SESSION['totalsal'],最后通过for循环遍历输出数组内容,这个流程本身没有语法错误。
必须满足的前提条件
不过这段代码要正常工作,有两个非常重要的前提:
必须先启动Session
在使用$_SESSION数组之前,你必须在任何输出(包括HTML标签、空格、换行)之前调用session_start()函数。如果没加这一行,PHP会无法识别$_SESSION,甚至抛出报错。明确
totalsal()方法的返回值类型- 如果
$obj->totalsal()返回的是单个值(比如整数、字符串),那你现在的写法没问题,$tsal会是一个包含单个元素的数组。 - 如果
$obj->totalsal()本身返回的就是一个数组,那你现在的写法会把这个数组作为单个元素塞进$tsal里,导致$tsal变成一个二维数组。比如totalsal()返回[5000, 6000],那$tsal就会是[[5000, 6000]],遍历输出时会打印出Array而不是具体数值。这种情况你应该直接赋值:$_SESSION['totalsal'] = $obj->totalsal();,不需要额外的$tsal数组。
- 如果
可以优化的地方
你用的for循环遍历数组没问题,但PHP里用foreach会更简洁直观,比如:
foreach($tsal as $salary) { echo $salary; }
优化后的完整示例代码
// 一定要放在代码最开头,任何输出之前! session_start(); // 情况1:totalsal()返回单个值 $tsal[] = $obj->totalsal(); $_SESSION['totalsal'] = $tsal; // 遍历输出 foreach($tsal as $sal) { echo $sal; } // 情况2:totalsal()返回数组,直接存储即可 // $_SESSION['totalsal'] = $obj->totalsal(); // foreach($_SESSION['totalsal'] as $sal) { // echo $sal; // }
总结一下:如果满足session_start()已正确调用,且$obj->totalsal()的返回值符合你的预期,那这段代码是正确的,但可以根据返回值类型调整写法让它更高效。
内容的提问来源于stack exchange,提问作者Megha Dholakia
相关产品推荐
相关产品推荐

