我有多個PHP類,每個PHP類有大約20個函數。一旦我包含此文件,服務器會將內存中的每個類和每個函數存儲在內存中嗎?一個文件中有多個PHP類
,或者一旦我實例,像這樣?:
$ajax = new ajax();
或者將服務器只緩存,我特別要求?:
$ajax->make_request();
我的功能將只加載類及其功能想知道是否可以在一個PHP文件中包含如此多的類和函數,或者是否應該放入某種僅包含作業所需的類和函數的邏輯類型。
我有多個PHP類,每個PHP類有大約20個函數。一旦我包含此文件,服務器會將內存中的每個類和每個函數存儲在內存中嗎?一個文件中有多個PHP類
,或者一旦我實例,像這樣?:
$ajax = new ajax();
或者將服務器只緩存,我特別要求?:
$ajax->make_request();
我的功能將只加載類及其功能想知道是否可以在一個PHP文件中包含如此多的類和函數,或者是否應該放入某種僅包含作業所需的類和函數的邏輯類型。
我認爲你對PHP的工作原理有些困惑。
每個請求PHP解析器,解析所請求的文件,例如, index.php
如果index.php
include
的另一個文件,PHP將解析該文件。
一旦解析了PHP文件,在請求期間它就會以「字節碼」(幾乎是機器語言)存儲在內存中。
無論文件中有多少個函數或類,它都將存儲在內存中以用於該請求。
像APC這樣的擴展可以在請求之間緩存內存中這些解析的字節碼,但它們需要添加到PHP中。
但是,更好的是(根據內存使用情況)使用自動加載類。
http://php.net/manual/en/language.oop5.autoload.php
PSR0是自動加載類的好一套準則:
https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-0.md
你需要的是所謂的「自動加載」的邏輯, 這個過程中magicaly包括類Ajax
當php可執行文件命中new Ajax();
指令時。
這樣,從來沒有無用的類加載到內存中。
看看PSR-0和這個好ClassLoader component。
(如果您的項目只有20個類別,則不需要添加自動加載器 - 利潤將非常低)。
不,默認情況下,服務器不會緩存任何內容,除非設置爲使用APC或類似擴展來緩存內容。因此,如果你的代碼使用所有這些類,那麼將它們放在一個文件中以減少I/O可能會更好。但是,如果您不使用,請將代碼分成邏輯類,放入單獨的文件並使用autoloading。
即使您的類和函數跨越幾千行文本,對單個圖像操作,編寫不好的數據庫查詢句柄或其他許多事情而言,內存影響可能非常小。減輕每個文件中只包含正確類的麻煩,同時觸及更多正在使用的內存。無論如何,代碼的內存可能會與前面幾個與'= new ....'實例化的對象相比,顯得蒼白無力。 – Fluffeh