繁体   English   中英

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

[英]Passing an Object between PHP pages, IDE and passing object to other classes problems

我继承了一些需要进行重大更改的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负载,一个Ajax调用到PageB.php制成。 div的内容作为post变量传递给PageB.php PageB.php中 ,以下代码反序列化对象:

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

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

  • 因为$expensiveObj ExpensiveClassPageB.php中未标识为ExpensiveClass类的实例,所以IDE不知道ExpensiveClass的字段和功能可用。 我无法执行自动完成功能,也无法在IDE中查找可用的功能。 另外,IDE无法捕获潜在的问题。 另一个开发人员专门在VI中工作,因此他从不关心。

  • PageB.php需要重构。 此页面中发生了视图,业务和控制器逻辑,我希望创建几个类,但是遇到一个我不知道如何将$expensiveObj传递给类的问题。

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

最后,以这种方式绕过对象甚至是一个好主意,还是我应该考虑进行更大的重构?

直接在HTML中存储对象绝不是一个好主意,因为客户端可以轻松更改它。 在PHP中,更常见的是根据给定参数在每个请求上创建新对象。 我看到您正在使用$id初始化对象,因此您可以仅在请求之间传递此ID。 将数据存储到会话也不是最佳做法,会话应用于特定于会话的数据,例如登录的用户等。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM