Php/docs/function.com-event-sink

提供:Dev Guides
< Php
移動先:案内検索

com_event_sink

(PHP 4 >= 4.2.0, PHP 5, PHP 7)

com_event_sinkCOM オブジェクトのイベントを PHP オブジェクトに接続する


説明

com_event_sink ( variant $variant , object $sink_object [, array|string|null $sink_interface = null ] ) : bool

variant が生成したイベントを PHP オブジェクト sink_object に通知するよう、COM に指示します。

この機能を利用する際には注意しましょう。もし以下の例のようなことを 行いたいのであれば、Web サーバー上でそれを行うことには まったく意味がありません。


パラメータ

variant
sink_object
sink_object には、要求されるディスパッチ インターフェイスと同じ名前のメソッドを持つクラスのインスタンスを 指定する必要があります。この要求を満たすクラスを作成するために、 com_print_typeinfo() を使用することができます。
sink_interface
PHP は variant に関連するタイプライブラリで 指定されたデフォルトのディスパッチインターフェイスを使用しようと しますが、使用させたいインターフェイス名を sink_interface に指定することで、それを 上書きすることが可能です。


返り値

成功した場合に true を、失敗した場合に false を返します。


変更履歴

バージョン 説明
8.0.0 sink_interface は、nullable になりました。


例1 COM イベントシンクの例

<?phpclass IEEventSinker {    var $terminated = false;   function ProgressChange($progress, $progressmax) {      echo "ダウンロードの進行状況: $progress / $progressmax\n";    }    function DocumentComplete(&$dom, $url) {      echo "ドキュメント $url 完了\n";    }    function OnQuit() {      echo "終了!\n";      $this->terminated = true;    }}$ie = new COM("InternetExplorer.Application");$sink = new IEEventSinker();com_event_sink($ie, $sink, "DWebBrowserEvents2");$ie->Visible = true;$ie->Navigate("http://www.example.org%22);while(!$sink->terminated) {  com_message_pump(4000);}$ie = null;?>

注意

警告 PHP 8.0.0 より前のバージョンでは、 イベントハンドラから exit() を呼ぶことはサポートされていませんでした。 そうしてしまうと、PHP がハングする可能性もありました。 この事象は、イベントハンドラから例外を投げてメインのコードでキャッチし、 exit() を呼び出すことで回避できます。


参考

  • com_print_typeinfo() - ディスパッチインターフェイスのために、PHP のクラス定義を出力する
  • com_message_pump() - COM メッセージを処理し、timeoutms ミリ秒の間待つ