在 2 个 php 脚本之间传递 $_SESSION 中的对象 [重复]
Posted
技术标签:
【中文标题】在 2 个 php 脚本之间传递 $_SESSION 中的对象 [重复]【英文标题】:Pass an object in $_SESSION between 2 php scripts [duplicate] 【发布时间】:2012-03-11 18:15:55 【问题描述】:可能重复:php: Storing 'objects' inside the $_SESSION
我有两个名为“search.php”和“share.php”的脚本文件,我想将信息从第一个发送到第二个。我创建了一个名为 $_SESSION['search'] 的变量,它是 Search 类的一个对象,但我无法读取第二个脚本文件中的对象。
search.php
session_start();
$_SESSION['search'] = new Search($text);
(...)
share.php
session_start();
$itemList = $_SESSION['search']->getItemList(); // Error
为什么?如何在 PHP 中将信息从一个脚本传递到另一个脚本?
【问题讨论】:
错误说什么???请始终在您的问题中提出错误。 PS。也许 share.php 没有包含 Search 类,因此您可以使用他们的方法。 (包括更多代码) 【参考方案1】:如果您要使用会话传递变量,那么您需要将变量添加到 search.php 中的会话,如下所示:
$itemlist = new Search($text);
$_SESSION['search'] = $itemlist;
然后像这样在 share.php 中取回变量:
$itemlist = $_SESSION['search'];
echo $itemlist;
如果您遇到问题,我会检查“new Search($text);”在第一页上,并确保它是您真正想要存储的开头。
【讨论】:
这就是我在 '$_SESSION['search'] = new Search($text);'中所做的事情 那么你遇到了什么问题?如果你在 share.php 上回显 $itemlist,你会得到什么? 我在 php_error.log 中出现错误 -> PHP 致命错误:在 /Applications/MAMP/htdocs/SAPP2/share.php 中的非对象上调用成员函数 getItemList()跨度> 【参考方案2】:PHP 自动序列化会话中的对象。
您不能在该对象中拥有任何资源成员(即数据库连接等)。如果您需要它们,您需要将 __sleep 和 __wake 方法添加到您希望存储在会话中的对象。 __sleep 将 obj 呈现为值 obj(实际上是一个数组,因为您必须返回一个数组)并且 __wake 方法应该根据该数组重建 obj。
阅读this
【讨论】:
【参考方案3】:也许您只是缺少包含 Search
类的 php 文件的包含。
require_once('Search.php');
如果在您从会话中反序列化对象时该类未知,那么 PHP 会创建一个“虚拟”对象,仅包含属性,但不了解其方法。如果包含该类,那么 PHP 可以将其反序列化为该类的真实对象。
【讨论】:
以上是关于在 2 个 php 脚本之间传递 $_SESSION 中的对象 [重复]的主要内容,如果未能解决你的问题,请参考以下文章