也许这是一个愚蠢的问题。但无论如何,这是我的问题。我的项目中有多个类。
一开始调用类 Calculate($param 1, $param 2...) 的构造函数。
这个计算类通过jQuery事件(单击,更改等)多次调用,具体取决于填充的新表单字段。价格和价值由php在后台计算,并通过AJAX在网站上表示(打字时实时)。
AJAX和 Compute 类之间的连接是一个文件(jsonDataHanlder),该文件从 AJAX 接收 POST 值,并为网站输出返回一个 JSON 字符串。因此,每次我调用此jsonDataHandler时,都会创建一个新的计算对象。使用更新的值,但从不使用第一个创建的对象。正如您可以想象的那样,我现在遇到了多个问题。
如何始终访问同一对象而不创建新对象?
编辑:由于技术原因,我无法使用会话。
下面是 php 应用程序的生命周期:
- 浏览器向网络服务器发送 http 请求
- Web服务器(例如Apache),接受请求并启动您的php应用程序(在本例中为jsonDataHandler文件)
- 您的 php 应用程序处理请求并生成输出
- 您的 php 应用程序终止
- Web服务器将php应用程序生成的响应发送到浏览器
结束时"死亡",您无法创建将在请求之间持久存在的对象。
可能的解决方法:
- 将数据
- 持久保存在服务器上 - 使用会话或数据库(正如您所说,这不是您的选择) 将数据
- 保留在客户端上 - 您仍然为每个请求创建对象,但您在客户端保留其他信息以便能够恢复对象的状态(请参阅下文)
- 使用类似 reactphp 的东西来让你的应用程序持久运行(这也可以不是一个选项,因为你需要使用不同的环境)。此选项的差异 - 切换到另一种不会每次重新启动服务器端应用程序的技术(node.js,python+flask等)。
因此,如果无法在服务器上保留数据,则相对简单的选项是在客户端上保留数据。
但是,这仅在您需要为每个单独的客户端保留计算器的状态时才有效(与为所有客户端保持相同的状态相比,在这种情况下,您确实需要在服务器上保留数据)。
具有客户端状态的流可以是:
- 客户端发送第一个计算请求,例如
param1=10
- 脚本的响应
value=100
- 客户端代码将
param1=10
和param1_value=100
存储到 Cookie 或浏览器本地存储中 - 客户端发送下一个计算,例如
param2=20
,这次客户端代码查找之前的结果并将所有内容一起发送(param1=10¶m1_value=100¶m2=20
- 在服务器上,您现在可以重新创建整个计算序列,因此您可以获得与拥有持久
Calculate
对象相同的结果
也许您应该尝试将 Compute 对象的参数值保存在数据库中,并且每次进行 AJAX 调用时,您都会从数据库中获取最新值。