【问题标题】:Pass an object in $_SESSION between 2 php scripts [duplicate]在 2 个 php 脚本之间传递 $_SESSION 中的对象 [重复]
【发布时间】: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 类,因此您可以使用他们的方法。 (包括更多代码)

标签: php session object


【解决方案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 可以将其反序列化为该类的真实对象。

    【讨论】:

      猜你喜欢
      • 2022-10-24
      • 1970-01-01
      • 2017-12-27
      • 2012-07-09
      • 2018-10-09
      • 2020-02-14
      • 2019-05-25
      • 2011-08-06
      • 1970-01-01
      相关资源
      最近更新 更多