1

1つのPHPファイルにそれぞれ約20の関数を持つ複数のPHPクラスがあります。このファイルを含めると、サーバーはすべてのクラスとすべての関数をメモリに保存しますか?

または、そのようにインスタンス化した場合にのみ、クラスとその関数をロードしますか?:

$ajax = new ajax();

または、サーバーは私が具体的に呼び出す関数のみをキャッシュしますか?:

$ajax->make_request();

1つのPHPファイルに非常に多くのクラスと関数を格納しても問題ないのか、それともジョブに必要なクラスと関数のみを含むある種のロジックを配置する必要があるのか​​、疑問に思っています。

4

3 に答える 3

9

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

于 2012-09-06T10:13:24.130 に答える
4

必要なロジックは「自動ロード」と呼ばれます。これは、Ajaxphp実行可能ファイルがnew Ajax();命令にヒットしたときに魔法のようにクラスを含めるプロセスです。

このように、メモリにロードされた無駄なクラスはありません。

PSR-0とこの優れたClassLoaderコンポーネントを見てください。

(プロジェクトにクラスが20しかない場合は、オートローダーを追加する必要はありません。利益は非常に低くなります)。

于 2012-09-06T10:14:15.267 に答える
2

いいえ、デフォルトでは、APC または同様の拡張機能を使用してコンテンツをキャッシュするように設定されていない限り、サーバーは何もキャッシュしません。したがって、コードでこれらすべてのクラスを使用する場合は、I/O を減らすためにそれらを 1 つのファイルにまとめた方がよいでしょう。ただし、使用しない場合は、コードを論理クラスに分割し、別のファイルに入れてautoloadingを使用してください。

于 2012-09-06T10:15:59.367 に答える