簡體   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