2011-05-08 37 views
5

如果我有很多單個類的實例,類本身的大小(代碼行數和方法數)是否對所需內存有任何影響?PHP類對象和內存使用情況

我想知道如果將內存使用情況和性能轉移到其他地方使用較少的方法是否會有好處。

回答

3

類定義在編譯時只會被編譯器讀取一次,即include()。如果您實例化大量類實例,則方法數量和代碼行數量不應該對所使用的內存量有任何意義上的影響。但是,成員變量的數量當然會影響內存使用。

3

有些人會討厭這個建議;但是如果您的類中有方法/屬性不是特定於該實例的,請將它們設置爲靜態方法/屬性。非靜態類方法/屬性應該只是那些特定於實例的類。

一般來說,這不會幫助內存使用太多(使屬性靜態將有助於內存)。單個實例只保存非靜態的類屬性,而類方法只保存在內存中一次,無論有多少實例。靜態屬性保持在全局級別(不要與全局工作空間混淆),所以它們只保存在內存中一次,無論有多少實例。

2

對象的內存使用情況與數組的情況相同。一個班級吃更多的字節。但除非你一次創建幾千個對象,否則這是不可測量的(在這種情況下,你的真正問題是另一個)。

在幕後,您總是有一個類屬性的字典,而類定義具有現有方法的關聯字典。後者在任何一種情況下都存在,只是添加另一種方法將只增加幾個字節。事實上,它就像在主函數字典中註冊一個全局函數一樣。

因此,不要避免類聲明中的方法不會節省內存。這是不明智的,因爲這些對象本身不會使用更多的內存。方法列表不關聯到對象實例。