(PHP 4 >= 4.2.0, PHP 5, PHP 7)
com_event_sink — Connect events from a COM object to a PHP object
   Instructs COM to sink events generated by
   comobject into the PHP object
   sinkobject.
  
Be careful how you use this feature; if you are doing something similar to the example below, then it doesn't really make sense to run it in a web server context.
comobject
sinkobject
       sinkobject should be an instance of a class with
       methods named after those of the desired dispinterface; you may use
       com_print_typeinfo() to help generate a template class
       for this purpose.
      
sinkinterface
       PHP will attempt to use the default dispinterface type specified by
       the typelibrary associated with comobject, but
       you may override this choice by setting
       sinkinterface to the name of the dispinterface
       that you want to use.
      
   Returns TRUE on success or FALSE on failure.
  
Example #1 COM event sink example
<?php
class IEEventSinker {
    var $terminated = false;
   function ProgressChange($progress, $progressmax) {
      echo "Download progress: $progress / $progressmax\n";
    }
    function DocumentComplete(&$dom, $url) {
      echo "Document $url complete\n";
    }
    function OnQuit() {
      echo "Quit!\n";
      $this->terminated = true;
    }
}
$ie = new COM("InternetExplorer.Application");
// note that you don't need the & for PHP 5!
$sink = new IEEventSinker();
com_event_sink($ie, $sink, "DWebBrowserEvents2");
$ie->Visible = true;
$ie->Navigate("http://www.example.org");
while(!$sink->terminated) {
  com_message_pump(4000);
}
$ie = null;
?>