PHPには、ホスト環境からの各Web要求が、要求が完了すると破棄される新しい新しいPHP環境を生成する実行モデルがあります。
したがって、簡単な答えは「いいえ」です。オブジェクトを作成して、リクエスト間で永続化することはできません。他の方法でオブジェクトを「永続化」する必要があります。
- シリアル化/逆シリアル化を通じて、セッション、データベース、APCのようなキー値ストア、ファイルシステム上のファイル、またはその他の方法を使用します。
- 別の長時間実行プロセスにオブジェクトを保持させ、PHPオブジェクトに、共有メモリ、パイプ、ソケットなどのIPCメソッドを介してオブジェクトと通信させることによって。
COMについてはよくわかりませんが、実行中のプロセスの外部でCOMオブジェクトを作成できるため、新しいオブジェクトを作成するのではなく、既存のオブジェクトに接続する(PHP固有ではない)方法があるのではないかと思います。(これは基本的に上記のオプション2であり、COMサービスをIPCとして使用します。)
PHP COMライブラリのドキュメントを少し掘り下げると、com_get_active_object()
機能が明らかになり、実用的なソリューションが得られる可能性があります。ただし、おそらくPHP以外のソースからCOMについてさらに学ぶ必要があります。また、単一のCOMオブジェクトを同時に使用することについての大きな警告を読んでください。
Webサーバーのコンテキストで使用com_get_active_object()
することは、必ずしも賢明なアイデアではありません。ほとんどのCOM/OLEアプリケーションは、Microsoft Officeであっても(または特に!)複数のクライアントを同時に処理するようには設計されていません。関連する一般的な問題の詳細については、»Officeのサーバー側の自動化に関する考慮事項をお読みください。
これは、すべてのリクエスト間で共有されるシングルトンCOMオブジェクトを作成することは、実際にはやりたくないことであることを私に示唆しています。
それが機能しない場合、PHPには、オブジェクトの実行状態を文字列にシリアル化し、再び同じ状態に逆シリアル化できるオブジェクトシリアル化メソッドがあります。__sleep()
クラスにand__wakeup()
メソッドを追加することで、これをカスタマイズできます。このメカニズムには癖があり、PHPCOMライブラリプロキシオブジェクトがどれだけうまくサポートするかはわかりません。