0

我一直在为 OOP 使用 PHP 并注意到一些事情......每次刷新页面时都会重新实例化对象。问题是我希望对象在某人在网站上的整个时间内将某些信息保留在类变量中。

  1. 是否有某种方法可以让对象在某人在网站上冲浪的整个过程中保持活力?
  2. 我的问题有什么替代方案?

有例子也很有帮助!

4

6 回答 6

7

您可以使用Sessions在不同页面之间保持与一个用户相关联的数据(引用)

PHP 中的会话支持包括一种在后续访问中保留某些数据的方法。

有关会话的更多信息,请参阅手册的会话处理部分。

于 2010-02-16T23:28:43.933 回答
6

PHP 没有状态。每个页面加载都是一次事件。您可以通过会话保存数据,或者通过将信息存储在数据库中。

于 2010-02-16T23:34:46.527 回答
2

一个 php 脚本必须在 apache 可以为页面提供服务之前退出,所以如果你真的想这样做,你可以做的一件事是序列化并存储你想要持久的所有对象,并使用会话cookie 来跟踪用户

于 2010-02-16T23:31:26.337 回答
2
  1. PHP 不是有状态的,每个请求都是服务器上的一个新进程

最好的办法是使用会话数据,并在实例化对象时将会话数据交给对象。让构建者从会话中提取他们需要的数据,您将基本上获得所需的状态完整性。

您可以使用访问会话

$_SESSION['stuff'] = $data;

然后你可以使用你的对象,比如 $x = new DataStore($_SESSION['stuff']);

如果会话中有数据,则对象将从该数据中填充自己。否则它将默认为其标准初始化。

于 2010-02-16T23:40:13.563 回答
1

会话很好,我在我的一些 PHP 编程中使用它们来保存对象状态。

或者更好的解决方案是使用Flex,这样您就不必担心无状态 HTTP 协议......

于 2010-02-17T04:02:47.630 回答
1

即使像序列化对象然后反序列化这样的方法很有用,您也必须确保首先了解对象“消失”的原因。

HTTP 是用于从 Web 服务器检索页面和其他资源的协议,它是无状态的。这基本上意味着一个请求对另一个请求一无所知,即使它来自同一个用户。可以这样想,当您请求 PHP 页面时,脚本会运行,完成后 Apache 会将结果发送给您。当您再次请求该页面时,它会执行与您第一次请求相同的操作。它是无国籍的。

有一些技术可以在请求之间保持状态(使其不会忘记您的对象),这些技术涉及 cookie 或 URL 重写之类的东西。但是在开发 Web 应用程序时,您必须牢记 HTTP(以及您的 PHP 脚本)的无状态特性。

于 2010-02-16T23:47:30.557 回答