我继承了一些我需要对其进行重大更改的 PHP 代码。我知道使用 PHP 可以序列化一个对象,并将页面之间的序列化文本作为 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'], '-_,', '+/=')));
$expensiveObj
PHP 现在可以访问的字段和方法。我遇到的问题是
因为在PageB.php
$expensiveObj
中没有将 标识为 Class 的实例,所以 IDE 不知道 的字段和函数是否可用。我不能自动完成,也不能在 IDE 中查找可用的功能。此外,IDE 无法捕获潜在问题。另一个开发人员专门在 VI 中工作,所以他从不在乎。ExpensiveClass
ExpensiveClass
PageB.php需要重构。这个页面中发生了视图、业务和控制器逻辑,我更愿意创建几个类,但是我遇到了一个问题,我不知道如何将它们传递
$expensiveObj
给一个类。
我的问题是,有没有办法将一个对象传递给一个类?有没有办法通知 IDE 传入的 post 变量确实是 的一个实例ExpensiveClass
?
最后,以这种方式传递对象甚至是一个好主意,还是我应该考虑更大的重构?