在PHP页面之间传递对象,IDE并将对象传递给其他类问题

时间:2012-12-05 21:40:21

标签: php object

我继承了一些我需要进行重大更改的PHP代码。我知道使用PHP可以序列化一个Object,并将页面之​​间的序列化文本作为FormData传递。在我继承的代码中,他们已经做到了,但这会产生一些可维护性问题。我想知道采用这种方法是否是一个好主意。

例如......

当用户打开 PageA.php 时,会创建以下内容:

$expensiveObj = new ExpensiveClass($id);

然后序列化$expensiveObj并将结果文本存储在div中,其中包含以下内容:

<div id="expensiveObj"><?php echo strtr(base64_encode(serialize($expensiveObj)), '+/=', '-_,');?></div>

加载 PageA.php 时,会对 PageB.php 进行ajax调用。 div的内容作为post变量传递给 PageB.php 。在 PageB.php 中,以下代码反序列化对象:

$expensiveObj = unserialize(base64_decode(strtr($_POST['expensiveObj'], '-_,', '+/=')));  

PHP现在可以访问$expensiveObj的字段和方法。我遇到的问题是

  • 由于 PageB.php 中未将$expensiveObj标识为类ExpensiveClass的实例,因此IDE不知道字段和函数ExpensiveClass的{​​{1}}可用。我不能做自动完成,也不能在IDE中查找可用的功能。此外,IDE无法捕捉潜在问题。另一位开发人员专门在VI工作,所以他从不关心。

  • PageB.php 需要重新考虑。在这个页面中都有视图,业务和控制器逻辑,我宁愿创建几个类,但是我遇到了一个问题,我不知道如何将$expensiveObj传递给一个类。

我的问题是,有没有办法将Object传递给一个类?有没有办法通知IDE传入的post变量确实是ExpensiveClass的实例?

最后,通过这种方式传递物体是一个好主意,还是应该考虑更大的重复因素?

1 个答案:

答案 0 :(得分:1)

直接在HTML中存储对象绝不是一个好主意,因为它可以很容易地被客户端更改。在PHP中,根据给定的参数在每个请求上创建新对象更常见。我看到你正在使用$id初始化你的对象,所以你可以在请求之间传递这个id。将数据存储到会话也不是最佳实践,会话应该用于特定于会话的数据,例如,登录用户等。

如果对象的创建非常昂贵,您可以使用缓存,例如memcache,一些外部library或只是编写自己的,例如将数据存储在文件系统或数据库中的JSON中。