3

PHP インタープリター内の静的 (クラス) フィールド表現について知りたいです。

たとえば、Java でクラスをロードすると、静的フィールドがその Class オブジェクトに関連付けられます。つまり、同じ JVM (および同じクラスローダ) を実行する 2 つのアプリケーションは、ある種の共有グローバル変数を持つことになります;)

ある種の PHP アクセラレータ/オペコード キャッシングを使用すると、実際に何がキャッシュされるのでしょうか? それは単にコンパイルされたバイトコードですか、それとも VM の状態 (クラス オブジェクトの格納を担当) の一部ですか?

リクエスト間で共有される静的フィールド/シングルトンオブジェクトなどを恐れているためです。

PS: 私は本当に PHP の初心者なので、質問があまりにもばかげている場合は申し訳ありません :)

4

1 に答える 1

4

オペコード キャッシュは何も変更しません。各 PHP スクリプトは、他のプロセスから分離された独自のプロセス(またはスレッド)によって実行されます。

オペコード キャッシュは、オペコード(JAVA のバイトコードに相当する PHP)のみをキャッシュし、スクリプトの現在の実行に関係のないものは保存しません。つまり、いかなる種類の「VM 状態」も保存しません。

これはstatic、たとえそのスクリプトが複数回並行して実行されたとしても、変数は PHP スクリプトの実行ごとに 1 つのバージョンで存在することを意味します。オペコードキャッシュを使用しても使用しなくても、何も変わりません。

于 2010-03-03T06:57:04.003 に答える